2012-02-23 91 views
5

我正在編寫一些Resarper自定義模式,以警告我們需要注意的一些代碼構造。其中之一是用的λ的變體取代OnpropertyChanged( 「字符串」)OnPropertyChanged(()=> PROPERTYNAME)Resharper自定義模式:忽略屬性屬性

我所限定的搜索模式是:

public $type$ $property$ 
{ 
      get { return $backingfield$; } 
      set 
      { 
       if($backingfield$ != value) { 
        $backingfield$ = value; 
        OnPropertyChanged($String$); 
       } 
      } 
} 

該圖案被替換爲:

public $type$ $property$ 
{ 
     get { return $backingfield$; } 
     set 
     { 
      if($backingfield$ != value) { 
       $backingfield$ = value; 
       OnPropertyChanged(() => $property$); 
      } 
     } 
} 

問題: 當應用此,ReSharper的扔掉的屬性定義的屬性。 這個片斷:

[MyAttribute] 
public int Test 
{ 
      get { return _Test; } 
      set 
      { 
       if (_Test != value) 
       { 
        _Test = value; 
        OnPropertyChanged("Test"); 
       } 
      } 
} 

獲取與

public int Test 
{ 
      get { return _Test; } 
      set 
      { 
       if (_Test != value) 
       { 
        _Test = value; 
        OnPropertyChanged(() => Test); 
       } 
      } 
} 

代替我如何保存的屬性?

UPDATE: 將派生自System.Attribute的類型佔位符添加到搜索和替換模式中都會部分修復它。

[$Attributes$] 
... 

剩下的問題是,屬性佔位符只匹配一個屬性,它無法在多個屬性。

+0

你是否真的需要搜索整個屬性?也許你可以搜索'OnPropertyChanged($ String $);'並用'OnPropertyChanged(()=> $ String $);'替換它。 – brgerner 2012-02-23 09:16:04

+1

當這樣做時,OnPropertyChanges(「測試」)被替換爲OnPropertyChanged(()=>「test」)。測試佔位符被定義爲一個字符串類型的表達式。 – Yoeri 2012-02-23 10:11:01

+0

你說得對。這是我的錯誤。 – brgerner 2012-02-23 11:20:41

回答

2

如果您無法獲得其他解決方案,則有一種解決方法。
您使用搜索模式(不使用替換模式)來顯示警告。我認爲已經有效。
然後,您創建一個環繞模板,將字符串替換爲()=> PropName。看到圖片中的示例:

enter image description here

然後,你必須通過搜索模式的警告和更換由環繞模板。
用法是:如果看到警告選擇字符串,請按Ctrl + E,Ctrl + U並選擇模板字符串以func返回屬性

當然,字符串選擇是困擾。但這是我迄今發現的最好的。

+0

+1謝謝,我會接受它來自jetbrains社區論壇的結果是否定的:-) – Yoeri 2012-02-23 13:50:42

+0

我收到答案@ jetbrains社區論壇提出問題: 你好Yoeri 恐怕屬性不能在這種情況下保存。歡迎您通過我們的錯誤跟蹤器發出請求:http://youtrack.jetbrains.net/issues/RSRP。謝謝! Andrey Serebryansky 高級支持工程師 JetBrains,Inc – Yoeri 2012-02-24 14:29:54

0

對於這樣的任務,我使用了正則表達式。 VS支持用正則表達式替換,但有時它們會掛起或者工作速度很慢。但是在大多數情況下,它們都有效

這會幫助你嗎?

Upd。你不需要在替換組中擁有所有的屬性,就像brgerner所說,你只需要只有一個字符串被轉換。例如搜索正則表達式將是OnPropertyChanged\("{:w*}"\);,並且替換字符串將是OnPropertyChanged(() => \1);

不知道您是否可以在Resharper替換模式中執行此操作。

+1

我們不打算全部替換。我們正在使用共享的Resharper設置,並要求開發人員在簽入前修復警告和錯誤。我們逐漸向Resharper添加新項目以提高代碼的一致性。全部替換都是一次性動作,當添加新代碼時,resharper檢查也會突出顯示。 – Yoeri 2012-02-23 10:13:13

+0

不知道resharper模式正在產生警告。似乎resharper似乎不能使用正則表達式來處理這些事情 - 也許你需要爲它找到或者寫一個插件。或者,也許你應該考慮使用StyleCop +。它可以很容易地擴展與手寫插件,可以警告這樣的事情 – Archeg 2012-02-23 10:25:14

+0

是的,在resharper中啓用代碼分析,你可以觸發警告,錯誤,建議或提示。它們導致代碼被強調並引起開發人員的注意。我們一直打算簽入文件沒有resharper警告或錯誤。 – Yoeri 2012-02-23 10:27:37