How to test if MethodInfo.ReturnType is type of System.Void?
Using reflection to obtain a MethodInfo, I want to test if the type returned is typeof System.Void.
Testing if it is System.Int32 works fine
myMethodInfo.ReturnType == typeof(System.Int32)
but
myMethodInfo.ReturnType == typeof(System.Void)
does not compile? At present Im testing if the string representation of the name is "System.Void" which seems very wrong开发者_运维问答.
You can't use System.Void
directly, but can access it using typeof(void)
.
Several people point out (here and in the comments here for example) that the reason for this is that the ECMA Standard 335, Partition II, section 9.4 says:
The following kinds of type cannot be used as arguments in instantiations (of generic types or methods):
- Byref types (e.g.,
System.Generic.Collection.List 1<string&>
is invalid)- Value types that contain fields that can point into the CIL evaluation stack (e.g.,
List<System.RuntimeArgumentHandle>
)- void (e.g.,
List<System.Void>
is invalid)
When I build this, I get the error:
System.Void cannot be used from C# -- use typeof(void) to get the void type object
Sounds like that's the answer...
Use
if(methodInfo.ReturnType.Name == "Void"){
// Your Code.........
}
精彩评论