2012-10-22 15 views
6

CA1305 उठाया जाता है जब एक अधिभार मौजूद होता है जिसके लिए IFormatProvider की आवश्यकता होती है लेकिन यह अधिभार कोड में उपयोग नहीं किया जाता है।सीए 1305: संस्कृति निर्दिष्ट करते समय Verbosity

string.Format(CultureInfo.InvariantCulture, "{0} - {1}", id, name); 

हालांकि, मुझे लगता है कि:

string.Format("{0} - {1}", id, name); 

स्पष्ट तरीका है इस चेतावनी से छुटकारा पाने के लिए इस्तेमाल किया जा संस्कृति निर्दिष्ट करने के लिए है:

उदाहरण के लिए, निम्न कोड इस चेतावनी को जन्म देती है यह रास्ता भी वर्बोज़ है।

कौन से विकल्प मौजूद हैं?

उत्तर

2

बहुत अधिक एकमात्र विकल्प जो स्पष्ट रूप से स्पष्ट प्रारूप प्रदाता को संरक्षित करते हुए कम वर्बोजिटिटी का कारण बनता है, संस्कृति-विशिष्ट अग्रभाग विधियों का उपयोग करना होगा। सौभाग्य से, आम तौर पर इनवेरिएंटकल्चर एंड करंटकल्चर के लिए केवल एक प्रारूप, इसलिए प्रत्येक अंतर्निहित स्वरूपण विधि के लिए केवल दो मुखौटा विधियों की आवश्यकता होगी।

अपने नमूना कोड के लिए एक विशिष्ट बहाना विधि इस तरह एक हस्ताक्षर हो सकता है:

public static string FormatForInvariantCulture(this string template, params object[] substitutions) 

और कहा जा इस प्रकार है:

"{0} - {1}".FormatForInvariantCulture(id, name); 

बहाना तरीकों का आयोजन संस्कृति में किया जाएगा के लिए एक और दृष्टिकोण - विशिष्ट फॉर्मेटर प्रकार जिन्हें आईओसी तकनीकों का उपयोग करके इंजेक्शन दिया जा सकता है। उदाहरण के लिए, निम्नलिखित की तरह एक अंतरफलक प्रारूपण के लिए परिभाषित किया जा सकता है: भले ही

public SomeClass(IFormatter systemFormatter, IFormatter uiFormatter) 
{ 
    // ... 
} 

:

public interface IFormatter 
{ 
    string Format(string template, params object[] substitutions); 
} 

संस्कृति विशिष्ट उदाहरण तो प्रकार निम्नलिखित की तरह कंस्ट्रक्टर्स का उपयोग कर स्वरूपण करने की आवश्यकता है कि में इंजेक्ट किया जा सकता है जिस तरह से मुखौटा विधियों को पैक किया जाता है, यह मानना ​​महत्वपूर्ण है कि CA2241 (ProvideCorrectArgumentsToFormattingMethods) विधियों के उपयोग की जांच नहीं करेगा, इसलिए ऐसा करने के लिए कस्टम नियम जोड़ने पर विचार करना उचित हो सकता है।

+0

ठीक है, यह कुछ है जो मैं अपने साथ आया था, यह वर्तमान में मेरे कोड में ऐसा लगता है: 'Format.Invariant ("{0} - {1}", आईडी, नाम) 'और' Format.ForUI'। समस्या यह है कि यह केवल 'string.Format' हल करता है। यह इस चेतावनी के किसी भी अन्य मामले को हल नहीं करेगा ... –

+0

यूप। आप संभावित रूप से कॉल करने वाली प्रत्येक स्वरूपण विधि के लिए अग्रभाग विधि जोड़ों को संभवतः समाप्त कर देंगे। साथ ही, यदि आप इस मार्ग पर जाते हैं, तो आपको अवगत होना चाहिए कि CA2241 ([ProvideCorrectArgumentsToFormattingMethods] (http://msdn.microsoft.com/en-us/library/ms182361.aspx)) मुखौटा को स्क्रीन नहीं करेगा, इसलिए आप शायद एक कस्टम नियम जोड़ने पर विचार करना चाहते हैं। –

+0

आप दो गुणों 'Invariant' और 'UI' के साथ स्थिर वर्ग' For' के बारे में क्या सोचते हैं? 'Invariant' बस' CultureInfo.InvariantCulture 'वापस लौटाएगा और 'UI'' CultureInfo.CurrentCulture' वापस करेगा। इससे इस तरह के कोड का कारण बन जाएगा: 'string.Format (For.Invariant," {0} - {1} ", आईडी, नाम); 'और इसके अतिरिक्त यह किसी भी परिदृश्य में उपयोग किया जा सकता है जो CA1305 उठाता है और समस्या को हल करेगा सीए 2241 के साथ। –

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