2011-08-18 13 views
9

वर्तमान इंस्टेंस सदस्यों का संदर्भ देते समय विजुअल स्टूडियो में this कीवर्ड के उपयोग को मजबूर करने का कोई तरीका है? निर्माता में एक बग के साथक्या मैं C# .NET में 'इस' कीवर्ड के उपयोग को मजबूर कर सकता हूं?

उदाहरण:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     Foo = Foo; // this should of course be lowercase but it's easy to miss 
    } 
} 

इस कोड को शायद कहीं बाद में कुख्यात 'object reference not set to an instance of an object' अपवाद उत्पन्न होगा।

कैसे यह काम करने के लिए, लेकिन अभी भी यह याद करना आसान है:

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     Foo = foo; // Valid syntax but unclear. 
    } 
} 

यह मान्य सिंटैक्स है लेकिन यह याद आती है आसान है।

वाक्य रचना मैं चाहता दृश्य स्टूडियो लागू: इस सम्मेलन लागू की जाती है

class MyClass 
{ 
    public object Foo { get; set; } 
    public MyClass(object foo) 
    { 
     this.Foo = foo; // this is "safe". 
    } 
} 

तो मैं पहले उदाहरण के रूप में बग के एक ही प्रकार बनाने के लिए टाइप करने के लिए this.Foo = this.Foo होगा।

मैं हमेशा this कीवर्ड का उपयोग करता हूं क्योंकि यह सी # और अन्य भाषाओं के बीच स्विच करते समय मेरे जीवन को आसान बनाता है, इसलिए कोई नुकसान नहीं होगा।

+2

विजुअल स्टूडियो आपको चेतावनी देता है कि जब आप fxcop –

+0

का उपयोग करते हैं तो पहली गलती करते हैं जैसा कि आपने कहा था कि मुझे नहीं लगता कि इससे आपके पास होने वाली समस्या में कोई फर्क पड़ता है, मैं कुछ करने के बजाय पैरामीटर का नाम बदलना चाहता हूं 'बार' की तरह, इस तरह आपको कोई समस्या नहीं होगी। – atoMerz

उत्तर

12

आप बस को सक्षम करने "त्रुटियों के रूप में चेतावनी दावत" करके इसे ठीक कर सकते हैं:

2 असाइनमेंट एक ही चर के लिए किए गए चेतावनी; क्या आप कुछ और सौंपने का मतलब था?

(CS1717 तुम सिर्फ इस एक के लिए इसे सक्षम करना चाहते हैं)

संकलक पहले से ही इस बारे में बताता है; आपको चेतावनियों की समीक्षा करनी चाहिए (और शून्य चेतावनियों के लिए लक्ष्य)।

पुन बीच एक स्पष्ट नहीं किया जा रहा है:

Foo = foo; 

मैं सहमत नहीं - कि पूरी तरह से मेरे लिए स्पष्ट है (जब तक आप एक वीबी पृष्ठभूमि से आते हैं और केस-अंधापन का विकास किया है)।

+2

उसका मतलब यह था कि यदि आप इसका मतलब है 'फू', तो आप कभी भी 'फू' नहीं लिख सकते हैं, जिसका मतलब है कि दूसरे उदाहरण में आपका मतलब है। तो उसका तरीका उस –

+0

को वास्तव में पकड़ लेगा, लेकिन आपने लिखा है कि यह अभी भी एक त्रुटि होगी जो सच नहीं है –

+0

@ ओस्कर ठीक - संपादित; बेहतर है? –

5

नहीं, आप इस तरह की भाषा का व्यवहार नहीं बदल सकते हैं। यदि आप ReSharper I का उपयोग करते हैं तो पर विश्वास करें कि आप इसे इस तरह की चीज़ को ध्वजांकित करने के लिए कह सकते हैं - यह त्रुटि सूची में नहीं आ सकता है, लेकिन मार्जिन में और समग्र फ़ाइल स्वास्थ्य के लिए "सूचक प्रकाश" में हो सकता है।

मैं व्यक्तिगत रूप से करते हैं नहीं है बात इस तरह की पर बहुत ज्यादा नींद कम करने के लिए, यह के रूप में आमतौर पर जैसे ही आप परीक्षण स्पष्ट - मैं केवल एक परिदृश्य जहां यह वास्तव में मुझे काट लिया है, जो था याद कर सकते हैं जब मैं एक प्रकार के प्रारंभकर्ता के भीतर एक स्टैक ओवरफ़्लो (बिल्कुल एक ही स्थिति नहीं, लेकिन फिर एक आवरण समस्या) के साथ समाप्त हुआ, विंडोज फोन 7 पर चल रहा है - मुश्किल डीबग वातावरण का मिश्रण, मूल रूप से।

+0

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

2

आप कस्टम चेतावनी और त्रुटियों FxCop \ दृश्य स्टूडियो कोड विश्लेषण

+2

स्पष्टीकरण के लिए धन्यवाद एक मौजूदा संकलक चेतावनी है; कोई कस्टम नियम आवश्यक नहीं है –

+0

मेरा मतलब था, आप एक कस्टम चेतावनी बना सकते हैं जो "0" – sternr

+0

के बिना स्थानीय गुणों तक पहुंचने पर सूचित करेगी, अगर आप इसके बारे में पैडेंटिक बनना चाहते हैं तो यह तरीका है। +1 –

3

का उपयोग कर आप StyleCop का उपयोग एक चेतावनी उत्पन्न करने के लिए अगर आप इस के साथ उपसर्ग नहीं है कर सकते हैं बना सकते हैं। आप डिफ़ॉल्ट नियमों का एक समूह के साथ आता है इन these instructions

StyleCop का पालन करते हुए StyleCop निर्माण प्रक्रिया के हिस्से के रूप में चलाने के लिए प्राप्त कर सकते हैं, उनमें से कई भयानक, लेकिन आप अपने डेवलपर्स के लिए सबसे अधिक उपयुक्त बनाने के लिए अपने नियम फ़ाइल को संपादित कर सकते हैं। आप स्टाइलकॉप फ़ाइल भी साझा कर सकते हैं ताकि परिवर्तन आपके सभी डेवलपर्स को तुरंत दोहराए जा सकें।

माइक्रोसॉफ्ट द्वारा प्रदान किया गया यह एक काफी अच्छा समाधान है, और यदि आप एक उपयुक्त नियम सेट के साथ आते हैं तो आपके डेवलपर अधिक "neater" कोड बनाएंगे। आप "विधियों को बहुत लंबा नहीं होना चाहिए" के आधार पर कस्टम नियम भी बना सकते हैं जहां आप लंबाई परिभाषित करते हैं। चीजों के साथ खेलने के लिए बहुत सारी चीज़ें।

मुझे लगता है कि आप चेतावनियों को त्रुटियों के रूप में सेट कर सकते हैं, लेकिन यदि आप सुनिश्चित करते हैं कि आपकी स्टाइलकॉप सेटिंग्स ठीक वैसे ही हैं जैसे आप उन्हें चाहते हैं।

+0

क्या एक अच्छा उपकरण है! मैंने FxCop का उपयोग किया है लेकिन यह एक अच्छा पूरक है। –