2012-02-23 39 views
5

Dikkat gerektiren bazı kod yapıları hakkında bizi uyarmak için bazı Resarper Özel Kalıpları yazıyorum. OnPropertyChanged Bunlardan biri bir lambda varyant OnPropertyChanged ("String") yerini almaktadır (() => özellikadı)Resharper Özel Kalıplar: Özellik özniteliklerini yok sayma

tanımlanan I ara Modelidir:

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

Bu model ile ikame edilmektedir:

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

sorun: bu uygulayarak Resharper mülkiyet tanımlanan özellikleri atıyor. Bu parçacık:

[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); 
       } 
      } 
} 

ile değiştirilir alır nasıl özelliklerini koruyabilir ??

UPDATE: deseni arama ve değiştirmek için, her iki System.Attribute türetilmiş bir tür tutucu ekleme kısmen giderir. Özellik tutucu sadece bir tane özellik eşleştiğini sorunu Kalan

[$Attributes$] 
... 

çoklu niteliklere başarısız olduğunu.

+0

Gerçekten mülk için arama yapmanıza gerek var mı? Belki de 'OnPropertyChanged ($ String $)' yi arayabilir ve 'OnPropertyChanged (() => $ String $) ile değiştirebilirsiniz. – brgerner

+1

Bunu yaparken, OnpropertyChanges ("test"), OnPropertyChanged (() => "test") ile değiştirilir. Test yer tutucu, tip dizgisinin bir ifadesi olarak tanımlanır. – Yoeri

+0

Haklısınız. Benim hatamdı. – brgerner

cevap

2

Başka bir çözüm bulamazsanız, bir geçici çözüm vardır.
Uyarıları göstermek için Arama düzeninizi kullanın (değiştirme desenini kullanmadan). Bence bu zaten çalışıyor.
Sonra bir dize () => PropName değiştirir bir Surround Şablon oluşturun. Örnek için resim bakınız:

enter image description here

O zaman Surround Şablon göre ara modeliyle uyarı ve değiştirilmesi gerekir.
Kullanım şu şekildedir: Uyarıyı görürseniz dizgeyi seçin, Ctrl + E, Ctrl + U tuşlarına basın ve numaralı özelliği döndürerek func işlevi için dizesini seçin.

Elbette dizi seçimi rahatsız ediyor. Ama şu ana kadar öğrendiğim en iyisi bu.

+0

+1 Teşekkürler, jetbrains topluluk forumlarından sonuçların olumsuz olduğunu kabul ediyorum :-) – Yoeri

+0

Cevap @ jetbrains topluluk forumlarını aldıktan sonra bir sorun açtı: Merhaba Yoeri Korkarım ki öznitelikleri olamaz Bu durumda korunur. Http://youtrack.jetbrains.net/issues/RSRP: Hata izleyicimizden bir istek göndermeyi kabul edersiniz. Teşekkür ederim! Andrey Serebryansky Kıdemli Destek Mühendisi JetBrains, Inc – Yoeri

0

Bu gibi görevler için normal ifadeler kullandım. VS, normal ifadelerle değiştirmeyi destekler, ancak bazen askıda kalıyor ya da çok yavaş çalışıyorlar. Ancak çoğu durumda çalışırlar.

Bu size yardımcı olacak mı?

Upd. Brgerner'ın önerdiği gibi, değiştirme grubunun tüm özelliklerine sahip olmanıza gerek yoktur, sadece bir dizenin dönüştürülmesi gerekir. Örneğin, arama normal ifadesiolacaktır ve değiştirme dizesi OnPropertyChanged(() => \1);

Yeniden Eşleştirmeyi değiştir deseninde yapıp yapamayacağınızdan emin değil.

+1

Her şeyi değiştirmeyi amaçlamıyoruz. Paylaşılan Yeniden Paylaşım ayarlarını kullanıyoruz ve geliştiricilerin kontrol etmeden önce uyarıları anbd hatalarını düzeltmelerini istiyoruz. Ardından, koddaki tutarlılığı geliştirmek için Yeni Öğeler'e yeni öğeler ekliyoruz. Tümünü tek seferlik bir eylem olarak değiştirin, yeniden kodlama kontrolleri yeni kod eklerken de vurgulayın. – Yoeri

+0

Yeniden şekillendirme kalıplarının uyarı ürettiğini bilmiyordum. Resharper'ın böyle şeyler için regex kullanamadığı herhangi bir şekilde - belki de bunun için bir eklenti bulmanız veya yazmanız gerekir. Ya da belki de StyleCop + kullanmayı düşünmelisiniz. Kolayca ReSharper etkinleştirilmiş kod analizi ile, Yep – Archeg

+0

böyle şeyler uyarabilir elle yazılmış eklentileri ile genişletmek olabilir, bir uyarı, hata, öneri veya ipucu ya trigget edebilirsiniz. Kodun altı çizilmeye ve geliştiriciden dikkat çekmeye neden olurlar. Her zaman yeniden başlatıcı uyarıları veya hataları olmayan dosyaları denetleriz. – Yoeri

İlgili konular