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

标签 c# generics list parameters

我正在尝试在 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/

相关文章:

c# - 将独立方法放在一个循环或单独的循环下是一种好习惯吗?

c# - 如何将非托管应用程序窗口置于最前面,并使其成为(模拟)用户输入的事件窗口

c# - 使用隔离存储时未处理 SecurityException

c# - 变量cfr的范围。 Pluralsight C# 测试

Java:使 Map<> 变量之一通用

java - 什么是Iterable接口(interface)中的forEach和spliterator,以及如何用链表实现

r - 将数据框转换为 R 中具有适当标签的列表

c# - 泛型 - C# - 无隐式引用转换

c# - 泛型类的静态成员是否绑定(bind)到特定实例?

r - 在嵌套列表中查找元素的索引?