gpt4 book ai didi

C# 派生类型到泛型列表作为参数

转载 作者:太空宇宙 更新时间:2023-11-03 20:39:39 25 4
gpt4 key购买 nike

我正在尝试在 C# 4.0 中执行以下操作:

我有一个基类和两个派生类


public class Base {}
public class DerivedClass1 : Base {}
public class DerivedClass2 : Base {}

我想做这样的事情,但是行不通。

如何告诉泛型列表接受基类和基类的派生类。


public class Class_1
{
public Class_1()
{
List<DerivedClass2> list = new List<DerivedClass2>();
new Class_2(list);
}
}

public class Class_2
{
public Class_2(List<Base> list)
{

}
}

在 Java 中我可以做这样的事情


public class Class_2
{
public Class_2(List<? extends Base> list)
{

}
}

C#中是否存在类似的东西

我希望我的问题很清楚,它只是关于列表的泛型。

非常感谢:)

最佳答案

一般情况:

function Foo<T>(List<T> list) where T : Base {
...
}

加上接口(interface)和委托(delegate),C# 允许协变/逆变。

例如IEnumerable<T>IList<T> ,因此您的代码将起作用!请注意,如果 List<T> 允许这样做s,你可以插入一个 Derived1进入列表 Derived2 s 通过使用公共(public)基类,这会破坏类型安全。所以只需坚持上面的只读接口(interface)。

关于C# 派生类型到泛型列表作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3647489/

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