很简单,为什么这段代码无法编译?
public interface IWorld { }
public class Foo<T> where T : IWorld { }
public void Hello<T>(T t) where T : IWorld
{
Foo<IWorld> bar1 = new Foo<T>(); //fails implicit cast
Foo<IWorld> bar2 = (Foo<IWorld>)new Foo<T>(); //fails explicit cast
}
由于每个 T
都实现了 IWorld
,所以每个 Foo<T>
的实例都应该匹配 Foo<IWorld>
。为什么不行呢?有没有什么解决方法?我真的不想使用泛型来完成这个任务。
Foo<IWorld>
将使用引用类型实现。因此,存在类型不匹配的问题。 - Damien_The_UnbelieverT
是一个实现接口的值类型,Foo<T>
仍然是一个类,因此是引用类型。 - Allan Rempel