57

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

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

 myMethodInfo.ReturnType == typeof(System.Int32)

 myMethodInfo.ReturnType == typeof(System.Void)

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

4

3 回答 3

78

您不能System.Void直接使用,但可以使用typeof(void).

有几个人指出(例如这里和这里的评论),其原因是ECMA 标准 335,Partition II,第 9.4 节说:

以下类型的类型不能用作(泛型类型或方法的)实例化中的参数:

  • Byref 类型(例如,System.Generic.Collection.List 1<string&> 无效)
  • 包含可以指向 CIL 评估堆栈的字段的值类型(例如,List<System.RuntimeArgumentHandle>
  • 无效(例如,List<System.Void>无效)
于 2009-11-30T14:56:30.937 回答
19

当我构建它时,我得到了错误:

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

好像是这个答案...

于 2009-11-30T14:49:33.573 回答
-1

采用

if(methodInfo.ReturnType.Name == "Void"){
  // Your Code.........
}
于 2019-12-04T17:57:15.990 回答