كيفية اختبار ما إذا كان MethodInfo.ReturnType هو نوع System.Void؟

StackOverflow https://stackoverflow.com/questions/1820243

  •  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 (الفراغ) للحصول على وجوه نوع الفراغ

ويبدو وكأنه هذا هو الجواب ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top