リフレクションを使用してMethodInfoを取得し、返される型がtypeofSystem.Voidであるかどうかをテストしたいと思います。
System.Int32であるかどうかのテストは正常に機能します
myMethodInfo.ReturnType == typeof(System.Int32)
だが
myMethodInfo.ReturnType == typeof(System.Void)
コンパイルされませんか?現在、名前の文字列表現が「System.Void」であるかどうかをテストしていますが、これは非常に間違っているようです。
_System.Void
_ を直接使用することはできませんが、typeof(void)
を使用してアクセスできます。
何人かの人々が指摘します( ここ そしてコメントで ここ 例えば)これの理由は ECMA標準335 、パーティションII、セクション9.4は言う:
次の種類の型は、(ジェネリック型またはメソッドの)インスタンス化の引数として使用できません。
- Byrefタイプ(例:_
System.Generic.Collection.List 1<string&>
_は無効)- CIL評価スタックを指すことができるフィールドを含む値タイプ(例:_
List<System.RuntimeArgumentHandle>
_)- void(例:_
List<System.Void>
_は無効です)
これをビルドすると、次のエラーが発生します。
System.VoidはC#からは使用できません-typeof(void)を使用してvoid型オブジェクトを取得します
それが答えのように聞こえます...