gpt4 book ai didi

c# - 将类的列表传递给方法,方法中使用抽象基类的列表作为参数

转载 作者:行者123 更新时间:2023-11-30 15:17:15 25 4
gpt4 key购买 nike

我有一些继承自抽象基类的类,我想将任何这些类的 List 传递给一个方法,该方法有一个 List基类作为参数。我怎样才能做到这一点?

这是我试过的 -

public abstract class MyBaseClass {}

public class MyClass1 : MyBaseClass {}

//Inside another class
public void MyMethod(List<MyBaseClass> listOfBaseClass){}

//Inside another class
List<MyClass1> myClass1List = new List<MyClass1>();
MyMethod(myClass1List); //ERROR HERE, This method call does not compile

有什么方法可以完成我想做的事情吗?

最佳答案

如果你想传递 MyBaseClass 的派生类型的集合,您需要更改签名

public void MyMethod(List<MyBaseClass> listOfBaseClass){}

到支持协变的类型,例如IEnumerableIReadOnlyCollection ,例如:

public void MyMethod(IEnumerable<MyBaseClass> listOfBaseClass){}

这是因为 List是不变的,而 IEnumerable是协变的。编译器之所以严格是因为List允许更改集合,例如如果MyMethod将被允许​​这样做:

public void MyMethod(List<MyBaseClass> listOfBaseClass)
{
listOfBaseClass.Add(new AnotherClass());
}

在哪里AnotherClassMyBaseClass 的另一个子类, 它会 break调用者的集合,应该是 List<MyClass1>() ;.

更多关于 this here

关于c# - 将类的列表传递给方法,方法中使用抽象基类的列表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46990056/

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