コンパイル時に既知の型のforeachループでジェネリック関数を呼び出す方法はありますか?このコードはコンパイルされません。なぜなら、typeはDoSmthの有効なパラメータではありませんが、私は何をしたいのかを示しています。C#コンパイル時に知られているジェネリック型をループする
public class X { }
public class Y { }
public class Z { }
public class Example
{
public Example()
{
Types = new List<Type>
{
typeof(X),
typeof(Y),
typeof(Z)
};
}
private List<Type> Types { get; }
public void DoAllTypes()
{
foreach (var type in Types)
{
DoSmth<type>();
}
}
private void DoSmth<T>()
{
// ... do smth based on T
}
}
編集:なぜ質問が重複していますか?私は特に「コンパイル時に知られている」と述べました。もう一方はReflectionsを使用して、コンパイル時に知られていない型を取得します。
、あなたは何をするだけの型パラメータを受け入れる方法をしたい場合その型に基づいた何か、それを行う最も簡単な方法は 'DoSmth'のように' private void DoSmth(Type type) '... –
と書かれています。実際に* 3つのメソッドが必要です。これらすべてのタイプは共通しているようには見えないので、共通の方法で行うことはあまりありません。 – HimBromBeere