C#泛型(List)中基类和子类 怎么转换?

清泛原创
List<ChildClass> childList = ...
Foo(List<BaseClass> baseList);
需求:把子类列表传入函数Foo,Foo支持所有子类列表。

方法一:
Foo(childList.Select(p => p as BaseClass).ToList())

上述 Select 转换是双向的,基类转子类也没问题。

方法二:
List<BaseClass> baseList = new List<BaseClass>();
baseList.AddRange(childList);
Foo(baseList);

这种方式是单向的,只能子类转基类,反之报错:
 

方法三:
函数参数使用泛型
public string Foo<T>(List<T> list) where T : BaseClass { ... }
Foo(childList);

方法四:
Foo(IEnumerable<BaseClass> baseList);
Foo(childList);

C# 基类 子类 转换

分享到:
评论加载中,请稍后...
创APP如搭积木 - 创意无限,梦想即时!
回到顶部