2015-11-08 6 views
10

का इंतजार है मैं सी # में नए नल-सशर्त ऑपरेटर का उपयोग करते हुए एक दिलचस्प सिस्टम.NullReferenceException का अनुभव कर रहा हूं। निम्नलिखित कोड मुझे एक NullReferenceException देता है "MyObject" रिक्त है:सी # शून्य-सशर्त ऑपरेटर के साथ त्रुटि और

await this.MyObject?.MyMethod() 

मैं उम्मीद है कि कॉल करने के लिए "MyMethod" बस नहीं करता है, तो "MyObject" रिक्त है किया जाएगा, या मैं गलत समझ रहा हूँ होगा शून्य-सशर्त ऑपरेटर का उद्देश्य?

उत्तर

9

आप ?? ऑपरेटर जोड़ सकते हैं ताकि ?. बदले में पूर्ण कार्य का उपयोग पूर्ण कार्य का उपयोग कर सके।

await (this.MyObject?.MyMethod() ?? Task.CompletedTask) 

मैं उम्मीद कर लिया है कि कॉल करने के लिए "MyMethod" बस नहीं करता है, तो "MyObject" रिक्त है किया जाएगा।

सच है। ?. ऑपरेटर MyMethod पर कॉल करने के बजाय शून्य कार्य देता है। शून्य संदर्भ अपवाद बनाया गया है क्योंकि आप शून्य कार्य पर प्रतीक्षा नहीं कर सकते हैं। कार्य शुरू किया जाना चाहिए।

संबंधित मुद्दे