c# - 在 C# 中重铸为基类

标签 c# class casting derived-class base-class

在下面的 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/

相关文章:

c# - 每 10% 输入一个代码分支,直到 100%

javascript - 从 React.js 中的另一个类组件调用函数

java - 为什么访问说明符不能用于在 Java 类的方法内部声明的变量?

swift - 使用类的 init() 中声明的变量 - Swift 4

c++ - 如何将表示像素的字符数组读取为 unsigned int

php - 转换变量时的三元运算符

c# - 哪个文件定义了代码隐藏文件中前端和方法之间的关系?

c# - List.Contains 奇怪的行为

c# - WebClient 禁止打开维基百科页面?

.net - 如何避免评估所有 'iif' 表达式?