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);