2010-10-28 6 views
19

निम्नलिखित कोड संकलित The call is ambiguous between the following methods or properties त्रुटि लौटाएगा। इसे हल करने के लिए कैसे करें क्योंकि मैं उन वर्गों में से किसी भी को null स्पष्ट रूप से परिवर्तित नहीं कर सकता हूं?जब तर्क शून्य है अस्पष्टता को हल करने के लिए कैसे?

static void Main(string[] args) 
{ 
    Func(null); 
} 

void Func(Class1 a) 
{ 

} 

void Func(Class2 b) 
{ 

} 
+1

ओह, माफ करना, लगता है जैसे मैं – Poma

उत्तर

10

कास्ट null प्रकार हैं:

Func((Class1)null); 
3

आप अशक्त उन दोनों में से किसी के लिए, जैसा कि आप एक चर Func((Class1)null) ही कास्ट करने के लिए सक्षम होना चाहिए।

8

तुम भी एक चर इस्तेमाल कर सकते हैं:

Class1 x = null; 
Func(x); 
+2

+1 कर सकते हैं :) इस विधि आसान है पढ़ सकते हैं और समारोह ((Class1) नल) से समझने के लिए। नल कास्टिंग सहज नहीं है। – wllmsaccnt

+0

जहां भी संभव हो, इसे कास्ट करना बेहतर होता है, क्योंकि यह संकलन समय पर कई समस्याएं पकड़ता है जो अन्यथा रनटाइम कास्ट त्रुटियां होंगी। – hypehuman

4

Func() तरीकों एक पैरामीटर है, जो अशक्त हो सकता है के रूप में एक संदर्भ प्रकार स्वीकार करते हैं। चूंकि आप विधि को एक स्पष्ट null मान के साथ कॉल कर रहे हैं, इसलिए संकलक यह नहीं जानता कि आपकी नल Class1 ऑब्जेक्ट या Class2 ऑब्जेक्ट के संदर्भ में है या नहीं। ,

कास्ट या तो Class1 या Class2 प्रकार के अशक्त Func((Class1)null) में के रूप में या Func((Class2)null)

Func() विधि है कि कोई पैरामीटर स्वीकार की एक नई अधिभार प्रदान करें, और कि अधिभार फोन:

आपके पास दो विकल्प आप एक स्पष्ट ऑब्जेक्ट संदर्भ की जरूरत नहीं है जब:

void Func() 
{ 
    // call this when no object is available 
} 
5

कास्टिंग के लिए as का उपयोग करते हुए यह थोड़ा अधिक reada बनाता है एक ही कार्यक्षमता के साथ खून।

Func(null as Class1); 
संबंधित मुद्दे