c#基类作为参数类型

use*_*605 0 c#

我有两个类,如下所示,A类继承自B类.

public class A 
{
     public string Title { get; set; }
}

public class B: A 
{

}
Run Code Online (Sandbox Code Playgroud)

然后我有一个如下的函数,它接收A类的项目列表

public static void Get(List<A> values)
{
    //do something
}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试将类B的项目列表传递到函数中时,如下所示

private function void Test()
{
     var k = new List<B>();
     Get(k);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息

无法从'System.Collections.Generic.List <B>'转换为'System.Collections.Generic.List <A>'

如果这不起作用,因为B只是继承自A并且具有A具有的属性?

我已经花了好几个小时试图查看它,但没有弄清楚我做错了什么,请帮忙.

Meh*_*ari 5

不,它不应该.它可能不安全:

class C : A {

}

public static void Get(List<A> values)
{
    values.Add(new C());
}
Run Code Online (Sandbox Code Playgroud)

如果你要打电话Getnew List<B>(),这将是不安全的,因为你会被插入的情况下CList<B>.

然而,如果List<T>是一个"只读"接口,那将是安全的,在这种情况下,协方差就是你所寻求的,是安全的.您可以List<A>改为IEnumerable<A>相反,它会工作.