निम्नलिखित कोड दिया गया है:
string someString = null;
switch (someString)
{
case string s:
Console.WriteLine("string s");
break;
case var o:
Console.WriteLine("var o");
break;
default:
Console.WriteLine("default");
break;
}
स्विच स्टेटमेंट पर मेल क्यों हो रहा है case var o
?
यह मेरी समझ है जो case string s
तब मेल नहीं खाती है s == null
क्योंकि (प्रभावी रूप से) (null as string) != null
झूठ का मूल्यांकन करता है। वी.एस. कोड पर IntelliSense मुझे बताता है कि o
यह एक string
समान है। कोई विचार?
के लिए उपयुक्त: अशक्त जाँच के साथ C # 7 स्विच केस
var
इस संदर्भ में अनुमति देने का निर्णय लिया । यह निश्चित है कि सी ++ में मुझे जिस तरह की चीज़ मिलेगी, ऐसा लगता है कि प्रोग्रामर को "सफलता के गर्त में" ले जाने के लिए निर्दिष्ट भाषा में नहीं। यहां, var
अस्पष्ट और बेकार दोनों चीजें हैं, जो कि सी # डिजाइन आमतौर पर बचने का प्रयास करती हैं।
switch
अनाम अभिव्यक्ति के लिए भीतर का अभिव्यक्ति हो सकता है - गुमनाम प्रकार, आदि; और यह अस्पष्ट नहीं है - संकलक स्पष्ट रूप से प्रकार जानता है; यह सिर्फ भ्रमित करने वाला है (कम से कम मेरे लिए) कि null
नियम इतने भिन्न हैं!
o
किया जाता हैstring
(जेनरिक के साथ पुष्टि की - यानीFoo(o)
जहांFoo<T>(T template) => typeof(T).Name
) - यह एक बहुत ही दिलचस्प मामला है जहांstring x
बर्ताव की तुलना में अलगvar x
भी जबx
(संकलक द्वारा) लिखा गया के रूप मेंstring