我有两个类,第一个类引用第二个类。我的问题是,为什么在第二课中,行cl.container = this as ClassContainer<MyClass>;
确实有效,而显式投射cl.container = (ClassContainer<MyClass>)this;
则没有。
class MyClass
{
public ClassContainer<MyClass> container { get; set; }
}
第二课:
class ClassContainer<T> where T : MyClass
{
public ClassContainer()
{
MyClass cl = new MyClass();
cl.container = this as ClassContainer<MyClass>; // works
cl.container = (ClassContainer<MyClass>)this; // does not work
}
}
答案 0 :(得分:1)
这是因为as
是安全转换,即如果无法转换类型,它不会引发异常或编译器错误。它只会返回null
。使用c1.container
后,null
应为as
。
从您的代码中,您可能正在尝试使用变体泛型。查看this link at MSDN以帮助您实现您的目标。你have to use interfaces though,并且不能使变量和逆变的类型参数。