generics 型推論 unity - ランタイムまで型が不明な場合は、C#でジェネリックメソッドを使用できますか?




1 Answers

なぜC#はそれが法的声明であることを許しませんか?

他の人が指摘しているように、あなたはこれをすることはできません。 何故なの? さて、あなたの例を考えてみましょう:

foreach(Type someType in listOfTypes)
{
    SomeMethod<someType>();
}

ランタイムまで型のリストの各型を知ることはできませんが、 SomeMethodの型パラメータはコンパイル時SomeMethodなければならないことにSomeMethodください。 コンパイラがあなたの呼び出しを解決するSomeMethod<T>SomeMethod<T>することは不可能なので、これは不正です。

C#4では、DLRをCLRに組み込むことでこれと他の多くの同様のことが可能になります。 特に、動的メソッド呼び出しは、コンパイル時に知られていないメソッドを呼び出すことを可能にします。

method constraints types

私が意味することを説明する最も簡単な方法は、コードサンプルです。 これはコンパイルされませんが、この効果を達成する方法はあります:

foreach(Type someType in listOfTypes)
{
    SomeMethod<someType>();
}

それがうまくいくのであれば本当に便利でしょうが、そうではありません。 上記と同じことを達成するための別の方法がありますか?それが法的声明であることをC#が許可しないのはなぜですか?

編集:これを行う唯一の方法のように私たちのニーズには遅すぎる可能性があります反射を介しているようだ。 なぜ効率的な方法が組み込まれていないのか、このようなものがC#4.0の作品にあるのかについての洞察はありますか?




Related