C# Generics を適切に使用する方法に苦労しています。具体的には、ジェネリック型をパラメーターとして受け取り、ジェネリックの型に基づいてさまざまなことを行うメソッドが必要です。しかし、ジェネリック型を「ダウンキャスト」することはできません。以下の例を参照してください。
コンパイラは、「タイプを(Bar<Foo>)
変換できません」というキャストについて不平を言います。しかし、型をチェックしたので、実行時にはキャストは問題ありません。Bar<T>
Bar<Foo>
public class Foo { }
public class Bar<T> { }
// wraps a Bar of generic type Foo
public class FooBar<T> where T : Foo
{
Bar<T> bar;
public FooBar(Bar<T> bar)
{
this.bar = bar;
}
}
public class Thing
{
public object getTheRightType<T>(Bar<T> bar)
{
if (typeof(T) == typeof(Foo))
{
return new FooBar<Foo>( (Bar<Foo>) bar); // won't compile cast
}
else
{
return bar;
}
}
}