मैं सी # 6 में नल-प्रोपेगेशन ऑपरेटर देख रहा हूं और इसे dynamic
प्रकार के चर के साथ काम करने की कोशिश की लेकिन सफलता के बिना। नीचे दिए गए कोड पर विचार करें, यह संकलित करता है लेकिन सीएलआर रनटाइम पर AccessViolationException
फेंकता है जब शून्य-प्रसार गतिशील वस्तु पर लागू होता है।नल प्रोपेगेशन ऑपरेटर और डायनामिक वेरिएबल
class SomeType
{
public object SomeProperty { get; set; }
static void Main()
{
var obj = new SomeType() { SomeProperty = "ABCD" };
var p1 = ((dynamic)obj).SomeProperty; //OK, p1 is set to "ABCD"
var p2 = ((dynamic)obj)?.SomeProperty; //AccessViolationException
Console.ReadLine();
}
}
पहले तो मैंने सोचा था कि यह एक बग हो सकता है, लेकिन फिर मैंने सोचा कि struct
बारे में है। आम तौर पर आप ?.
ऑपरेटर को वैल्यू टाइप वैरिएबल पर लागू नहीं कर सकते हैं (क्योंकि यह शून्य नहीं हो सकता है)। लेकिन आप इसे dynamic
पर डाल सकते हैं और फिर ऑपरेटर को लागू कर सकते हैं। इसलिए मैंने SomeType
को struct
में बदल दिया और उसी अपवाद को मिला।
सवाल यह है कि, यह डिज़ाइन द्वारा है कि गतिशील चर के लिए शून्य-प्रसार हमेशा अपवाद फेंकने जा रहा है क्योंकि अंतर्निहित वस्तु मूल्य प्रकार हो सकती है?
AccessViolationException
वैसे भी बदसूरत है, क्या आप कोड चलाते समय वही प्राप्त करते हैं?
अंधेरे में बस एक स्टैब: क्या होता है यदि आप 'आंतरिक' के बजाय 'कुछ टाइप' 'सार्वजनिक 'करते हैं? –
@ChrisSinclair आउटपुट एक ही – nosalan
है यदि आप अपने exe के खिलाफ 'PEVerify.exe' चलाते हैं, तो क्या यह किसी भी त्रुटि की रिपोर्ट करता है? – latkin