57

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

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

 myMethodInfo.ReturnType == typeof(System.Int32)

しかし

 myMethodInfo.ReturnType == typeof(System.Void)

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

4

3 に答える 3

78

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

何人かの人々が指摘しています (こことここのコメントなど)。その理由は、ECMA Standard 335、Partition II、セクション 9.4 に次のように記載されているためです。

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

  • Byref 型 (例:System.Generic.Collection.List 1<string&> 無効)
  • CIL 評価スタックを指すことができるフィールドを含む値の型 (例: List<System.RuntimeArgumentHandle>)
  • void (例:List<System.Void>無効)
于 2009-11-30T14:56:30.937 に答える
19

これをビルドすると、次のエラーが表示されます。

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

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

于 2009-11-30T14:49:33.573 に答える