【问题标题】:Why does as instead of a cast work? [duplicate]为什么 as 而不是 cast 工作? [复制]
【发布时间】:2017-02-07 07:48:56
【问题描述】:

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

【问题讨论】:

标签: c# generics casting


【解决方案1】:

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

从您的代码中,您可能正在尝试使用变体泛型。查看this link at MSDN 以帮助实现您想要做的事情。您将have to use interfaces though,并且不能使类型参数既是协变的又是逆变的。

【讨论】:

  • cl.container 在运行他的代码时不为空
  • @MaksimSimkin 尝试使用派生MyClass 的类作为类型参数。 c1.container 肯定会为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-07
  • 2023-01-30
  • 2019-07-13
  • 2014-07-17
  • 1970-01-01
  • 2013-03-21
  • 2011-02-14
相关资源
最近更新 更多