निम्नलिखित कोड दिया गया है:
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