为什么而不是演员?

时间:2017-02-07 07:48:56

标签: c# generics casting

我有两个类,第一个类引用第二个类。我的问题是,为什么在第二课中,行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
    }
}

1 个答案:

答案 0 :(得分:1)

这是因为as是安全转换,即如果无法转换类型,它不会引发异常或编译器错误。它只会返回null。使用c1.container后,null应为as

从您的代码中,您可能正在尝试使用变体泛型。查看this link at MSDN以帮助您实现您的目标。你have to use interfaces though,并且不能使变量和逆变的类型参数。

相关问题