लघु संस्करण: out
तर्क के बाद एक नामित तर्क एक कंपाइलर त्रुटि देता है, लेकिन मुझे भाषा विनिर्देश में इस व्यवहार के लिए कोई समर्थन नहीं मिल रहा है।सी # में मिक्सिंग आउट और नामांकित पैरामीटर: पैरामीटर को क्यों नामित किया जाना चाहिए?
लांग संस्करण:
मैं Enum.TryParse<TEnum>
तीन पैरामीटर अधिभार उपयोग कर रहा हूँ, लेकिन मैं अपने कोड स्पष्ट करने के ignoreCase
पैरामीटर, जैसा कॉल नाम के लिए पसंद करेंगे:
MyEnum res;
b = Enum.TryParse<MyEnum>(inputString, true, out res);
पत्ते बुलियन अस्पष्ट का अर्थ (जब तक यह विधि ज्ञात नहीं है)। इसलिए मैं उपयोग करना चाहते हैं:
b = Enum.TryParse<MyEnum>(inputString, out res, ignoreCase: true);
हालांकि एक त्रुटि के रूप में संकलक रिपोर्ट करें:
Named argument 'ignoreCase' specifies a parameter for which a positional argument has already been given
और आईडीई ignoreCase
पैरामीटर पर प्रकाश डाला गया। VS2010 लक्ष्यीकरण .NET 4, और VS11 बीटा या तो 4 या 4.5 लक्ष्यीकरण सभी एक ही परिणाम देते हैं। out
पैरामीटर नामकरण सभी मामलों में त्रुटि को हटा देता है।
b = Enum.TryParse<MyEnum>(inputString, result: out res, ignoreCase: true);
मैं (परहेज जेनरिक सहित) के लिए विभिन्न तरीकों की एक संख्या भर में इस की कोशिश की है , दोनों ढांचे से और मेरी विधानसभा में: हमेशा एक ही परिणाम: एक out
पैरामीटर नामांकित पैरामीटर के बाद देता है एक त्रुटि।
मैं इस त्रुटि के लिए कोई कारण नहीं देख सकते हैं, और § 7.5.1 तर्क सूचियाँ सी # भाषा विशिष्टता की: संस्करण 4.0 किसी भी कारण से प्रदान करने के लिए क्यों एक out
नामांकित पैरामीटर के बाद एक देना चाहिए प्रतीत नहीं होता त्रुटि। त्रुटि का पाठ एक बग के रूप में व्याख्या का समर्थन करता प्रतीत होता है: कोई स्थितित्मक तर्क नहीं है जो ignoreCase
के लिए एक वैध मिलान हो सकता है।
क्या मेरा विनिर्देश गलत है? या यह एक कंपाइलर बग है?
इसलिए फ्रेमवर्क डिजाइन के दिशा निर्देशों में सलाह enum
मानकों को पसंद करते हैं।
उदाहरण के लिए: दिया:
private static void TestMethod(int one, float two, out string three) {
three = "3333";
}
इस इस कॉल का नाम भी पैरामीटर पर एक ही त्रुटि देता है जब तक out
पैरामीटर को भी नामित किया गया है:
TestMethod(1, out aString, two: 1.0f);
spec को फिर से पढ़ने पर, मैं इस दृष्टिकोण को देख सकता हूं। शर्मनाक यह PowerShell दृष्टिकोण का उपयोग नहीं करता है: नामित तर्कों के साथ नामित पैरामीटर मिलान करें और फिर शेष स्थितित्मक तर्कों के साथ शेष स्थितित्मक पैरामीटर। – Richard