如何测试MethodInfo.ReturnType是System.Void的类型?

时间:2009-11-30 14:47:23

标签: c# reflection methodinfo

使用反射来获取MethodInfo,我想测试返回的类型是否为typeof System.Void。

测试它是否为System.Int32正常工作

 myMethodInfo.ReturnType == typeof(System.Int32)

 myMethodInfo.ReturnType == typeof(System.Void)

不编译?目前我正在测试名称的字符串表示是否为“System.Void”,这似乎非常错误。

3 个答案:

答案 0 :(得分:60)

您无法直接使用System.Void,但可以使用typeof(void)访问它。

有些人指出(例如here和评论here),原因是ECMA Standard 335,分区II,第9.4节说:

  

以下几种类型不能   在实例化中用作参数   (通用类型或方法):

     
      
  • Byref类型(例如System.Generic.Collection.List 1<string&>   无效)
  •   
  • 包含可指向CIL的字段的值类型   评估堆栈(例如,List<System.RuntimeArgumentHandle>
  •   
  • void(例如,List<System.Void>无效)
  •   

答案 1 :(得分:18)

当我构建它时,我收到错误:

  

System.Void不能在C#中使用 - 使用typeof(void)来获取void类型对象

听起来就是答案......

答案 2 :(得分:0)

使用

if(methodInfo.ReturnType.Name == "Void"){
  // Your Code.........
}