在下面的 C# 中,设置了一个从类 X 派生的类 A 和一些获取列表列表作为参数的方法,
class X
{...};
class A : X
{...};
List<A> listA;
List<X> listX;
void SomeMethod(ref List<X>)
{...};
有什么方法可以对类 A(派生自 X)使用相同的方法吗?将该列表从 A 重铸为 X 似乎行不通。
SomeMethod(ref listX); // Works
SomeMethod(ref (List<X>)listA); // Does not work
最佳答案
实际上,它已经可以工作了,因为 IEnumerable
在其泛型类型参数上协变。
如果你这样修改你的签名:
void SomeMethod(ref IEnumerable<X>)
{...};
然后你可以传递一个List<X>
或一个List<A>
就这样就好了。
总的来说,你通过 ref
传递它很奇怪.您通常不会以这种方式传递引用类型。
关于c# - 在 C# 中重铸为基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29853245/