14

मैं निम्नलिखित कोड है में चेतावनी "सदस्य को सौंपा कभी नहीं है"। संकलक हमेशा मुझे चेतावनी देता है कि Trochoid कभी भी असाइन नहीं किया जाता है और हमेशा शून्य होगा। हालांकि जादू के कारण RaiseAndSetIfChangedCallerMemberName समर्थन के माध्यम से करता है, कोड काम करता है और संकलक गलत है।दबाने सी #

मैं कैसे साफ कर सकता हूं मेरे कोड में इन चेतावनियों को दबाएं?

उत्तर

15

कैसे करें सफाई से इन चेतावनियों को दबाने

एक अनुचित काम के लिए एक वैकल्पिक करने के लिए किया जाएगा बस एक #pragma:

#pragma warning disable 0649 // Assigned by reflection 
ViewPortViewModel _Trochoid; 
#pragma warning restore 0649 

यह काम करना चाहिए, और यह उस जगह पर कुरूपता रखता है जो इसे दस्तावेज करने के लिए समझ में आता है - क्षेत्र की घोषणा में।

यदि आपके पास एक ही तरीके से कई फ़ील्ड हैंडल हैं, तो आप उन सभी को लागू टिप्पणी के साथ अक्षम चेतावनियों के समान "ब्लॉक" में डाल सकते हैं।

चाहे आप इसे "साफ" के रूप में देखते हैं या नहीं, स्वाद का विषय है। मुझे लगता है कि मैं इसे असाइनमेंट के लिए पसंद करता हूं जो चेतावनियों को हटाने के साइड-इफेक्ट के लिए केवल वहां हैं।

+0

हालांकि एक डिफ़ॉल्ट असाइनमेंट कुछ ऐसा है जो आप वैसे भी कर सकते हैं। किसी भी तरह से हम कह रहे हैं "हम जानते हैं कि यह कुछ भी नहीं है"। इसमें से, मुझे समूहबद्ध कारक पसंद है। लेकिन, मैं कौन हूं ... –

+0

मैं इसे पसंद करता हूं क्योंकि यह ग्रह को केवल पढ़ने के लिए मानने से एक देव (शायद रिशेर्पर या इसी तरह का उपयोग कर रहा है) को रोक देगा। – weston

+0

क्या मैं SuppressMessageAttribute http://msdn.microsoft.com/en-us/library/system.diagnostics.codeanalysis.suppressmessageattribute%28v=vs.100%29.aspx का उपयोग कर सकता हूं लेकिन मैं यह नहीं समझ सकता कि अत्यधिक उत्पन्न कैसे करें कंपाइलर चेतावनी से verbose attr? – bradgonesurfing

4

आप इसे एक संदर्भ प्रकार के लिए एक डिफ़ॉल्ट आवंटित कर सकते हैं: मेरे कोड में

ViewPortViewModel _Trochoid = null; 
+0

यह काम करता है लेकिन यह गलत लगता है क्योंकि मैं कन्स्ट्रक्टर में मान को ओवरराइट करता हूं। – bradgonesurfing

+1

यदि आपके पास resharper जैसे टूल हैं, तो ऐसा करने से यह आपको यह बताना होगा कि फ़ील्ड को केवल पढ़ा जा सकता है, और आपको अभी भी उस पर दबाव डालना होगा। – weston

6

अब हर मंच ReactiveUI में CallerMemberNameAttribute समर्थन हासिल है कि, आपकी जुनूनी बाध्यकारी संकलक के उत्पीड़न पीड़ित की आवश्यकता नहीं है:

ViewPortViewModel _Trochoid; 
public ViewPortViewModel Trochoid 
{ 
    get { return _Trochoid; } 
    set { this.RaiseAndSetIfChanged(ref _Trochoid, value); } 
} 

अन्य भार के अब वास्तव में अनावश्यक हैं, लेकिन मैं उन्हें में छोड़ उन्हें हटाने क्योंकि एक ब्रेकिंग चेंज है और इसलिए रीएक्टिवयूआई 5.0

+0

ओपी पहले से ही कॉलरमम्बरनाम एट्रिब्यूट का उपयोग कर रहा है - और मूल्य प्रतिबिंब द्वारा सेट कर रहा है: "हालांकि, राइज एंडसेट आईफ चेंज ने कॉलरमेम्बरनाम के माध्यम से किए गए जादू के कारण" - मुझे लगता था कि वे बदलना नहीं चाहते थे कि वे 'RaiseAndSetIfChanged' । –

+0

यदि आप रेफ ओवरलोड का उपयोग करते हैं, तो यह प्रतिबिंब नहीं करेगा :) –

+0

+ मुफ्त प्रदर्शन बढ़ावा –

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