使用反射获取MethodInfo,我想测试返回的类型是否为typeof System.Void。
测试它是否是 System.Int32 工作正常
myMethodInfo.ReturnType == typeof(System.Int32)
但
myMethodInfo.ReturnType == typeof(System.Void)
不编译?目前我正在测试名称的字符串表示是否为“System.Void”,这似乎非常错误。
使用反射获取MethodInfo,我想测试返回的类型是否为typeof System.Void。
测试它是否是 System.Int32 工作正常
myMethodInfo.ReturnType == typeof(System.Int32)
但
myMethodInfo.ReturnType == typeof(System.Void)
不编译?目前我正在测试名称的字符串表示是否为“System.Void”,这似乎非常错误。
您不能System.Void
直接使用,但可以使用typeof(void)
.
有几个人指出(例如这里和这里的评论),其原因是ECMA 标准 335,Partition II,第 9.4 节说:
以下类型的类型不能用作(泛型类型或方法的)实例化中的参数:
- Byref 类型(例如,
System.Generic.Collection.List 1<string&>
无效)- 包含可以指向 CIL 评估堆栈的字段的值类型(例如,
List<System.RuntimeArgumentHandle>
)- 无效(例如,
List<System.Void>
无效)
当我构建它时,我得到了错误:
System.Void 不能从 C# 中使用——使用 typeof(void) 来获取 void 类型对象
好像是这个答案...
采用
if(methodInfo.ReturnType.Name == "Void"){
// Your Code.........
}