كيفية اختبار ما إذا كان MethodInfo.ReturnType هو نوع System.Void؟
-
10-07-2019 - |
سؤال
باستخدام الانعكاس للحصول على MethodInfo، أريد اختبار ما إذا كان النوع الذي تم إرجاعه هو typeof System.Void.
اختبار ما إذا كان System.Int32 يعمل بشكل جيد
myMethodInfo.ReturnType == typeof(System.Int32)
لكن
myMethodInfo.ReturnType == typeof(System.Void)
لا يجمع؟في الوقت الحالي، أقوم باختبار ما إذا كان تمثيل السلسلة للاسم هو "System.Void" والذي يبدو خاطئًا جدًا.
المحلول
لا يمكنك استخدام System.Void
مباشرة، ولكن يمكن الوصول إليه باستخدام typeof(void)
.
ويشير العديد من الأشخاص (هنا وفي التعليقات هنا على سبيل المثال) أن السبب في ذلك هو أن معيار ECMA 335, ، القسم الثاني، القسم 9.4 يقول:
لا يمكن استخدام الأنواع التالية من النوع كوسيطات في مثيلات (من الأنواع أو الأساليب العامة):
- أنواع Byref (على سبيل المثال،
System.Generic.Collection.List 1<string&>
غير صالح)- أنواع القيمة التي تحتوي على حقول يمكن أن تشير إلى كومة تقييم CIL (على سبيل المثال ،
List<System.RuntimeArgumentHandle>
)- باطلة (على سبيل المثال،
List<System.Void>
غير صالح)
نصائح أخرى
وعندما أقوم ببناء هذا، وأحصل على خطأ:
<اقتباس فقرة>وSystem.Void لا يمكن أن تستخدم من C # - استخدام تشير typeof (الفراغ) للحصول على وجوه نوع الفراغ
اقتباس فقرة>ويبدو وكأنه هذا هو الجواب ...