MethodInfo.ReturnTypeがSystem.Voidのタイプであるかどうかをテストするにはどうすればよいですか?
-
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型オブジェクトを取得します
そのような音が答えです...
所属していません StackOverflow