gpt4 book ai didi

c# - 无法传递派生列表<>

转载 作者:行者123 更新时间:2023-11-30 13:13:56 24 4
gpt4 key购买 nike

我有

class A
{}

class B : A
{}

我还有一个需要 List 参数的方法

void AMethod(List<A> parameter)
{}

为什么我不能

List<B> bs = new List<B>();
AMethod(bs);

其次,使这项工作最优雅的方法是什么?

问候

最佳答案

与其他答案相反,.NET 4.0 不支持此。只有接口(interface)和委托(delegate)支持泛型变化。但是,.NET 4.0 允许您这样做:

void AMethod(IEnumerable<A> parameter) {}
...
List<B> list = new List<B>();
AMethod(list);

在 .NET 3.5 中,您可以借助 Cast 获得大致相同的结果:

void AMethod(IEnumerable<A> parameter) {}
...
List<B> list = new List<B>();
AMethod(list.Cast<A>());

另一种选择是使 AMethod 通用:

void AMethod<T>(List<T> parameter) where T : A
...
List<B> list = new List<B>();
AMethod(list); // Implicitly AMethod<B>(list);

这可能会或可能不会满足您的需要 - 这取决于您在 AMethod 中执行的操作。如果您需要添加类型为 A 的新项,就会遇到问题 - 这是正确的。如果您只需要从列表中获取项目,那很好。

关于c# - 无法传递派生列表<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2423563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com