C# 为什么用as代替cast工作?
我有两个类,第一个类引用第二个类。我的问题是,为什么在第二个类中,行C# 为什么用as代替cast工作?,c#,generics,casting,C#,Generics,Casting,我有两个类,第一个类引用第二个类。我的问题是,为什么在第二个类中,行cl.container=this作为ClassContainer可以工作,显式castcl.container=(ClassContainer)可以工作没有 class MyClass { public ClassContainer<MyClass> container { get; set; } } class-MyClass { 公共类容器容器{get;set;} } 二等舱: class Clas
cl.container=this作为ClassContainer代码>可以工作,显式castcl.container=(ClassContainer)可以工作代码>没有
class MyClass
{
public ClassContainer<MyClass> container { get; set; }
}
class-MyClass
{
公共类容器容器{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
}
}
class类容器,其中T:MyClass
{
公共类容器()
{
MyClass cl=新的MyClass();
cl.container=此为ClassContainer;//有效
cl.container=(ClassContainer)this;//不工作
}
}
这是因为as
是安全强制转换,即如果无法强制转换类型,则不会引发异常或编译器错误。它只会返回null
c1。使用as
后,容器
应为null
从代码中,您可能试图使用变体泛型。查看以帮助实现您试图做的事情。你会,也不能使类型参数同时变为协变和逆变。当你说“不工作”时,它会抛出错误吗?@prtdomingo不会compile@KevinWallis在这里寻找答案:cl.container在运行his时不是空的code@MaksimSimkin尝试使用派生类MyClass
作为类型参数<代码>c1。容器
肯定为空。