मुझे FxCop warning CA1006, माइक्रोसॉफ्ट के साथ परेशानी हो रही है। "DoNotNestGenericTypesInMemberSignatures" डिज़ाइन करें। विशेष रूप से, मैं वर्ग को ReadOnlyCollection<Report<T>>
से प्राप्त करता हूं, और इसके public
कन्स्ट्रक्टर पैरामीटर के रूप में IList<Report<T>>
लेता है।क्या FxCop चेतावनी CA1006 के लिए कोई अच्छा कामकाज है?
इस चेतावनी ठीक करने के लिए सुझाव बहुत उपयोगी नहीं है:
"इस नियम का उल्लंघन ठीक करने के लिए, डिजाइन को बदलने नेस्टेड प्रकार तर्क हटाने के लिए।"
- निर्माता
internal
बनाओ: वहाँ के रूप में सुझाव डिजाइन को बदलने के लिए दो तरीके मैं अब तक देख सकते हैं कर रहे हैं। यह मेरे मामले में काम नहीं करता है। कन्स्ट्रक्टरpublic
होना चाहिए क्योंकि इस संग्रह वर्ग को असेंबली के बाहर कोड द्वारा तत्काल आवश्यकता होनी चाहिए। - निर्माता को
IList<Report<T>>
के बजायReport<T>[]
ले जाएं। यह उप-इष्टतम है क्योंकि बाह्य कोड में गतिशील आकार के डेटा संरचनाओं का उपयोग करने की लचीलापन होनी चाहिए जैसे कि निश्चित आकार के सरणी के बजायList<T>
।
इस बिंदु पर, मैंने इस चेतावनी को छोड़ दिया है और दबा दिया है। क्या कोई बेहतर समाधान है?
मैं घोंसले के "सुरक्षित" स्तर पर कोई सीमा नहीं डालूंगा। जेनेरिक प्रकारों को नेस्टेड किया जाना चाहिए हालांकि गहराई से अर्थशास्त्र की आवश्यकता होती है। कॉन्वर्सिस और contravariance के लिए इंटरफेस के समर्थन पर सीमाओं का मतलब है कि कोड जो अपेक्षा करता है उदा। एक 'IDictionary>' आईडीआईआर <स्ट्रिंग, सूची > 'स्वीकार करने में सक्षम नहीं होगा, लेकिन जब नेस्टेड जेनेरिक अर्थात् सही होते हैं तो मैं उनके आसपास काम करने की कोशिश करने के बजाय उनका उपयोग करने का पक्ष लेता हूं। –
supercat