2009-06-29 10 views
8

मैं दो कंस्ट्रक्टर्स कि इस तरह दिखेगा के साथ एक वर्ग है:,CA1062: सह निर्माता पर ValidateArgumentsOfPublicMethods कॉल

public MyClass(SomeOtherClass source) : this(source, source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 

जब मैं FxCop चलाने के लिए, इसे सही ढंग से CA1062: ValidateArgumentsOfPublicMethods का उल्लंघन की रिपोर्ट क्योंकि source में null है अगर पहला कन्स्ट्रक्टर, source.Name पर NullReferenceException फेंक देगा।

क्या इस चेतावनी को ठीक करने का कोई तरीका है?

मैं एक विस्तार विधि बना सकता हूं जो शून्य के लिए जांचता है और इसकी तर्क देता है, लेकिन यह बदसूरत होगा। साथ ही, जैसा कि मैं समझता हूं, यह चेतावनी को हल नहीं करेगा क्योंकि FxCop यह नहीं समझ पाएगा कि यह क्या करता है।

उत्तर

10

इस तरह?

public MyClass(SomeOtherClass source) : this(source, source == null ? null : source.Name) { } 
public MyClass(SomeOtherClass source, string name) { /* ... */ } 
+0

हां, यही वह है। आप किसी भी स्थैतिक विधि का भी उपयोग कर सकते हैं। – Groo

0

मैं कहूंगा कि इस चेतावनी को ठीक करने का एकमात्र तरीका इसे बंद करना होगा। FxCop एक शानदार टूल है लेकिन कभी-कभी आपको यह याद रखना होगा कि यह केवल एक उपकरण है और सुझाव दे सकता है जो हमेशा आपके कोड पर फ़िट नहीं होते हैं।

इस उदाहरण में मैं चेतावनी को अनदेखा करता हूं या इसे अक्षम करता हूं यदि आप इसे देखना नहीं चाहते हैं।

1

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

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