gpt4 book ai didi

c# - 如何将类型的泛型列表设置为其接口(interface)的泛型列表?

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

如何将类型的泛型列表设置为其接口(interface)的泛型列表?

我有一个 Car继承自 ICar 的类.

我有一个 Client接受 List<ICar> 的类构造函数中的对象,我不想显式地写 List<Car>对于 Client类。

但是不能设置

var carsList = new List<Car>();
List<ICar> cars = carsList // compile error
var client = new Client(cars);

您将如何实现这一目标?

我意识到,如果我将它设为 IList,它就可以工作,但我必须显式地转换我的 carsList 对象。

最佳答案

您将无法使用 .NET Framework List 并执行您想要的类型的隐式转换。

我将从另一个线程窃取一些东西来演示基本问题:

考虑:

List<Animal> animals = new List<Giraffe>();
animals.Add(new Monkey());

或使用您的代码:

interface ICar{}
class Car:ICar{}
class BatMobile:ICar{}

List<ICar> cars = new List<Car>()
cars.Add(new BatMobile()) // We can't add a BatMobile to a List of Car.

IEnumerable 可以接受这种类型的变化,因为您确保用户无法通过 IEnumerable 接口(interface)修改集合。使用列表无法保证这一点。

https://stackoverflow.com/a/2033931/299408

关于c# - 如何将类型的泛型列表设置为其接口(interface)的泛型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14143607/

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