2011-08-11 8 views
20

मैं गतिशील ऑब्जेक्ट पर को कैसे देख सकता हूं?सी #: गतिशील ऑब्जेक्ट पर एक नल-चेक कैसे करें

छद्म कोड:

public void Main() { 
    dynamic dynamicObject = 33; 
    if(true) { // Arbitrary logic 
     dynamicObject = null; 
    } 
    Method(dynamicObject); 
} 

public void Method(dynamic param) { 
    // TODO: check if the content of 'param' is equal to null 
} 

उत्तर

30

आप संभावना गतिशील वस्तु एक कस्टम समानता ऑपरेटर कि जिस तरह से व्याख्या की है null बदल जाएगा होगा के बारे में चिंतित हैं? यदि ऐसा है तो बस Object.ReferenceEquals

if (Object.ReferenceEquals(null, param)) { 
    ....... 
} 
+3

+1 निश्चित रूप से। आप 'ऑब्जेक्ट' खो सकते हैं, हालांकि – Ani

+0

@ एनी सुनिश्चित नहीं है कि आप वहां क्या प्राप्त कर रहे हैं। – JaredPar

+1

आप केवल 'संदर्भ एक्वाल्स (शून्य, परम)' लिख सकते हैं। मैं इस विषय पर ~ 5 प्रश्नों से विश्वास नहीं कर सकता हूं, इसलिए इसे हल नहीं किया। –

0

का उपयोग तुम हमेशा सिर्फ प्रकार ऑब्जेक्ट का परम कर सकते हैं, कि क्या संकलक कर रही है है। जब आप एक पैरामीटर गतिशील टाइप करते हैं तो इसका मतलब केवल उस विधि के भीतर होता है, केवल यह पैरामीटर के सभी उपयोगों के लिए गतिशील चाल का उपयोग कर रहा है, लेकिन इसके बाहर टाइप ऑब्जेक्ट का केवल एक हस्ताक्षर है। आपके डायनामिक ऑब्जेक्ट का एक अधिक शक्तिशाली उपयोग आपके द्वारा बुलाए जाने वाले तरीके के अधिभार के लिए होगा, इसलिए यदि आप अपना उदाहरण वही रखते हैं और केवल दो ओवरलोड हैं तो यह रनटाइम प्रकार के आधार पर दो विधियों में से एक को कॉल करेगा, और आप हमेशा अधिक प्रकार के लिए और जोड़ें।

public void Main() { 
    dynamic dynamicObject = 33; 
    if(true) { // Arbitrary logic 
     dynamicObject = null; 
    } 
    Method(dynamicObject); 
} 
public void Method(int param) { 
    //don't have to check check null 
    //only called if dynamicObject is an int 
} 
public void Method(object param) { 
// will be called if dynamicObject is not an int or null 
} 
संबंधित मुद्दे