मैं कुछ रुचि के साथ सी # 6 में जोड़े गए सुरक्षित नेविगेशन ऑपरेटर सुविधा का पालन कर रहा हूं। मैं थोड़ी देर के लिए इसके लिए तत्पर हूं। लेकिन मुझे उम्मीद से कुछ अलग व्यवहार मिल रहा है। मुझे एहसास है कि मैं वास्तव में समझ में नहीं आता कि यह वास्तव में कैसे काम करता है।सी # सुरक्षित नेविगेशन ऑपरेटर - वास्तव में क्या चल रहा है?
इस वर्ग
class Foo {
public int? Measure;
}
को देखते हुए यहाँ कुछ नया ऑपरेटर का उपयोग कोड है।
Foo f = new Foo { Measure = 3 };
Console.WriteLine(f?.Measure); // 3
f = new Foo { Measure = null };
Console.WriteLine(f?.Measure); // null
f = null;
Console.WriteLine(f?.Measure); // null
यहां तक कि सब कुछ अपेक्षित काम कर रहा है। ?.
सदस्यों तक पहुंच रहा है जब बाएं हाथ की ओर शून्य नहीं है, अन्यथा शून्य वापस आ रहा है। लेकिन यहां चीजें ऐसी दिशा में जाती हैं जिनकी मुझे उम्मीद नहीं थी।
var i = f?.Measure; // i is Nullable<int>
Console.WriteLine(i.HasValue); // false
Console.WriteLine(f?.Measure.HasValue); // null
क्या?
i
से मुझे HasValue
क्यों मिल सकता है, लेकिन उसी अभिव्यक्ति से नहीं जिसे मैंने i
पर असाइन किया था? HasValue
कभी शून्य कैसे हो सकता है?
संपादित करें: मेरा वास्तविक प्रश्न प्रोग्राम व्यवहार के बारे में है, संकलन त्रुटि नहीं। मैंने संकलन के बारे में अतिरिक्त सामान हटा दिया, और इस सवाल को और अधिक संकीर्ण रूप से केंद्रित किया कि क्यों दो अलग-अलग परिणाम उसी तर्क की तरह दिखते हैं।
के संभावित डुप्लिकेट [अमान्य सशर्त ऑपरेटर नल प्रकार के साथ काम नहीं कर रहा?] (Http://stackoverflow.com/questions/31811392/null-conditional-operator-not-working-with-nullable-types) – shf301
कि सवाल संकलन त्रुटियों के बारे में है। चूंकि मेरा वास्तविक प्रश्न संकलन त्रुटियों के बारे में नहीं है, लेकिन कार्यक्रम व्यवहार, मैंने इस सवाल को मेरे प्रभाव को स्पष्ट किया है। – recursive