web-dev-qa-db-ja.com

MethodInfo.ReturnTypeがSystem.Voidのタイプであるかどうかをテストする方法は?

リフレクションを使用してMethodInfoを取得し、返される型がtypeofSystem.Voidであるかどうかをテストしたいと思います。

System.Int32であるかどうかのテストは正常に機能します

 myMethodInfo.ReturnType == typeof(System.Int32)

だが

 myMethodInfo.ReturnType == typeof(System.Void)

コンパイルされませんか?現在、名前の文字列表現が「System.Void」であるかどうかをテストしていますが、これは非常に間違っているようです。

45
Dead account

_System.Void_ を直接使用することはできませんが、typeof(void)を使用してアクセスできます。

何人かの人々が指摘します( ここ そしてコメントで ここ 例えば)これの理由は ECMA標準335 、パーティションII、セクション9.4は言う:

次の種類の型は、(ジェネリック型またはメソッドの)インスタンス化の引数として使用できません。

  • Byrefタイプ(例:_System.Generic.Collection.List 1<string&>_は無効)
  • CIL評価スタックを指すことができるフィールドを含む値タイプ(例:_List<System.RuntimeArgumentHandle>_)
  • void(例:_List<System.Void>_は無効です)
61
Jeff Sternal

これをビルドすると、次のエラーが発生します。

System.VoidはC#からは使用できません-typeof(void)を使用してvoid型オブジェクトを取得します

それが答えのように聞こえます...

18
Szymon Rozga