2009-11-30 10 views
40

एक विधिInfo प्राप्त करने के लिए प्रतिबिंब का उपयोग करके, मैं परीक्षण करना चाहता हूं कि वापस लौटाया गया प्रकार System.Void है।यदि MethodInfo.ReturnType सिस्टम का प्रकार है, तो परीक्षण कैसे करें। शून्य?

परीक्षण अगर यह System.Int32 ठीक काम करता है है

myMethodInfo.ReturnType == typeof(System.Int32) 

लेकिन

myMethodInfo.ReturnType == typeof(System.Void) 

संकलन नहीं करता है? वर्तमान में आईएम परीक्षण अगर नाम का स्ट्रिंग प्रस्तुति "System.Void" है जो बहुत गलत लगता है।

+1

क्या त्रुटि आप जब कि कोड का निर्माण हो रही है ? –

+0

यदि कोई विधि शून्य लौटाती है, तो इसका मतलब है कि यह कुछ भी वापस नहीं करता है, तो तर्क को उलट क्यों न करें और जांचें कि क्या वापस किया जा सकता है? बस एक विचार ... –

+2

कंपाइलर का कहना है "सिस्टम। शून्य का उपयोग सी # से नहीं किया जा सकता है - शून्य प्रकार प्राप्त करने के लिए टाइप टाइप (शून्य) का उपयोग करें"। आह, बस त्रुटि पढ़ें। DOH! –

उत्तर

53

आप System.Void सीधे उपयोग नहीं कर सकते, लेकिन typeof(void) का उपयोग कर इसे उपयोग कर सकते हैं।

कई लोगों का कहना है (here और टिप्पणियों उदाहरण के लिए here में) है कि कि ECMA Standard 335, विभाजन द्वितीय है इस का कारण, खंड 9.4 का कहना है:

The following kinds of type cannot be used as arguments in instantiations (of generic types or methods):

  • Byref types (e.g., System.Generic.Collection.List 1<string&> is invalid)
  • Value types that contain fields that can point into the CIL evaluation stack (e.g., List<System.RuntimeArgumentHandle>)
  • void (e.g., List<System.Void> is invalid)
+14

मैं इतनी मूर्ख हूँ। त्रुटि संदेश कहता है "उपयोग प्रकार (शून्य)"। –

+2

त्रुटि विंडो को और छुपा नहीं! ;) लेकिन यह बहुत अजीब है। –

18

जब मैं इस का निर्माण, मैं त्रुटि मिलती है:

System.Void cannot be used from C# -- use typeof(void) to get the void type object

ध्वनि है कि इसका जवाब है जैसे ...

+0

हाँ, मैं असफल रहा। आरटीएफएम जवाब भी स्वीकार कर लिया होगा :) –

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

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