我正在为如何正确使用 C# 泛型而苦苦挣扎。具体来说,我希望有一个将泛型类型作为参数并根据泛型类型执行不同操作的方法。但是,我不能“向下转换”通用类型。请参见下面的示例。
编译器抱怨演员(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;
}
}
}