2012-02-23 18 views
5

मैं कुछ Resarper कस्टम पैटर्न लिख रहा हूँ कुछ कोड निर्माणों कि ध्यान देने की जरूरत के बारे में हमें चेतावनी देने के लिए। इनमें से एक एक लैम्ब्डा प्रकार के साथ OnpropertyChanged ("स्ट्रिंग") को बदल रहा है OnPropertyChanged (() => प्रॉपर्टी)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); 
       } 
      } 
} 

के साथ बदल जाता है कैसे मैं विशेषताओं की रक्षा कर सकते ??

अद्यतन: दोनों खोज और पैटर्न को बदलने के लिए एक प्रकार प्लेसहोल्डर System.Attribute से प्राप्त जोड़ा जा रहा है यह आंशिक रूप से ठीक करता है।

[$Attributes$] 
... 

समस्या शेष है कि गुण प्लेसहोल्डर केवल एक विशेषता से मेल खाता है, यह कई विशेषताओं पर विफल रहता है।

+0

क्या आपको वास्तव में पूरी संपत्ति की खोज करने की आवश्यकता है? हो सकता है कि आप केवल 'ऑनप्रॉपर्टी चेंज ($ स्ट्रिंग $) की खोज कर सकें;' और इसे 'ऑनप्रॉपर्टी चेंज (() => $ स्ट्रिंग $) द्वारा प्रतिस्थापित करें; '। – brgerner

+1

ऐसा करने पर, OnpropertyChanges ("test") को OnPropertyChanged (() => "test" के साथ बदल दिया जाता है)। परीक्षण प्लेसहोल्डर को प्रकार स्ट्रिंग की अभिव्यक्ति के रूप में परिभाषित किया जाता है। – Yoeri

+0

आप सही हैं। यह मेरी गलती थी। – brgerner

उत्तर

2

यदि आप किसी अन्य समाधान नहीं मिल सकता है अगर वहाँ एक समाधान नहीं है।
चेतावनियां दिखाने के लिए आप अपने खोज पैटर्न (प्रतिस्थापन पैटर्न का उपयोग किए बिना) का उपयोग करते हैं। मुझे लगता है कि पहले से ही काम करता है।
फिर आप परिवेश टेम्पलेट बनाते हैं जो एक स्ट्रिंग को () => PropName पर बदल देता है। एक उदाहरण के लिए चित्र देखें:

enter image description here

तो फिर तुम खोजें पैटर्न द्वारा चेतावनी और एक चारों ओर खाका द्वारा की जगह है।
उपयोग है: यदि आप देखते हैं चेतावनी स्ट्रिंग का चयन, Ctrl + ई, Ctrl + U और टेम्पलेट का चयन करें स्ट्रिंग संपत्ति लौटने समारोह के लिए।

बेशक स्ट्रिंग चयन परेशान कर रहा है। लेकिन यह अब तक का सबसे अच्छा है जो मैंने पाया है।

+0

+1 धन्यवाद, जेटब्रेन समुदाय मंचों के नतीजे नकारात्मक होने पर मैं इसे स्वीकार करूंगा :-) – Yoeri

+0

मैंने जेटब्रेन समुदाय मंचों का जवाब प्राप्त करने के बाद एक मुद्दा दायर किया: हैलो योएरी मुझे डर है गुण नहीं हो सकते इस मामले में संरक्षित। हमारे बग ट्रैकर के माध्यम से अनुरोध करने के लिए आपका स्वागत है: http://youtrack.jetbrains.net/issues/RSRP। धन्यवाद! एंड्री सेरेब्रिंस्की वरिष्ठ समर्थन अभियंता जेटब्रेन, इंक – Yoeri

0

इस तरह के कार्यों के लिए मैं नियमित अभिव्यक्ति का उपयोग किया है। वीएस नियमित अभिव्यक्तियों द्वारा प्रतिस्थापित करने का समर्थन करता है, लेकिन कभी-कभी वे लटकते हैं या बस बहुत धीमे काम करते हैं। हालांकि ज्यादातर मामलों में वे काम करते हैं।

क्या इससे आपकी मदद मिलेगी?

अद्यतन। ब्रांजेनर सुझाव देते हैं कि आपको प्रतिस्थापन समूह में सभी संपत्तियों की आवश्यकता नहीं है, आपको केवल एक स्ट्रिंग को परिवर्तित करने की आवश्यकता है। उदाहरण के लिए खोज नियमित अभिव्यक्ति OnPropertyChanged\("{:w*}"\); होगी, और प्रतिस्थापन स्ट्रिंग OnPropertyChanged(() => \1);

सुनिश्चित नहीं है कि आप Resharper में पैटर्न को प्रतिस्थापित कर सकते हैं या नहीं।

+1

हम सभी को प्रतिस्थापित करने का इरादा नहीं रखते हैं। हम साझा रिशेर्पर सेटिंग्स का उपयोग कर रहे हैं और डेवलपर्स से अनुरोध करने से पहले चेतावनी एबीबी त्रुटियों को ठीक करने के लिए अनुरोध करते हैं। कोड में स्थिरता में सुधार के लिए हम धीरे-धीरे नए आइटम जोड़ते हैं। सभी को एक बार की कार्रवाई के रूप में अच्छी तरह से बदलें, नया कोड जोड़ते समय पुनर्विक्रेता जांच भी हाइलाइट करती है। – Yoeri

+0

नहीं पता था कि resharper पैटर्न चेतावनियां पैदा कर रहे हैं। ऐसा लगता है कि किसी भी तरह से resharper ऐसी चीजों के लिए regex का उपयोग नहीं कर सकता है - शायद आपको इसके लिए एक प्लगइन खोजने या लिखने की जरूरत है। या शायद आपको StyleCop + का उपयोग करने पर विचार करना चाहिए। इसे हस्तलिखित प्लगइन के साथ आसानी से बढ़ाया जा सकता है, जो ऐसी चीजों को चेतावनी दे सकता है – Archeg

+0

हाँ, resharper में कोड विश्लेषण सक्षम के साथ, आप या तो चेतावनी, त्रुटि, सुझाव या संकेत ट्रिगर कर सकते हैं। परिणामस्वरूप कोड को रेखांकित किया जा रहा है और डेवलपर से ध्यान आकर्षित किया जा रहा है। हम हमेशा किसी भी resharper चेतावनी और न ही त्रुटियों के साथ te checkin फाइलों का इरादा रखते हैं। – Yoeri

संबंधित मुद्दे