MethodInfo.ReturnTypeがSystem.Voidのタイプであるかどうかをテストするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1820243

  •  10-07-2019
  •  | 
  •  

質問

リフレクションを使用してMethodInfoを取得し、返される型がtypeof System.Voidかどうかをテストします。

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

 myMethodInfo.ReturnType == typeof(System.Int32)

しかし

 myMethodInfo.ReturnType == typeof(System.Void)

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

役に立ちましたか?

解決

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型オブジェクトを取得します

そのような音が答えです...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top