给定以下类定义:
public class BaseClass
{
public string SomeProp1 { get; set; }
}
public class DerivedClass : BaseClass
{
public string SomeProp2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能List<BaseClass>
把它转换成一个List<DerivedClass>
?
在我的真实世界场景中BaseClass
有一大堆属性,我不想一个接一个地复制(然后记得在添加额外属性时进行维护).
添加参数化构造函数BaseClass
不是一个选项,因为此类由WCF服务引用定义.
Pet*_*ris 25
List<DerivedClass> result =
listBaseClass.ConvertAll(instance => (DerivedClass)instance);
Run Code Online (Sandbox Code Playgroud)
实际上当你需要根据原始对象创建新对象时,ConvertAll是好的,当你只需要施放时你可以使用以下
List<DerivedClass> result =
listBaseClass.Cast<DerivedClass>().ToList();
Run Code Online (Sandbox Code Playgroud)
如果不是列表中的所有项目都可以转换为DerivedClass,则使用OfType
List<DerivedClass> result =
listBaseClass.OfType<DerivedClass>().ToList();
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 17
您无法转换实际对象,但可以使用转换后的内容轻松创建新列表:
List<BaseClass> baseList = new List<BaseClass>(...);
// Fill it here...
List<DerivedClass> derivedList = baseList.ConvertAll(b => (DerivedClass) b);
Run Code Online (Sandbox Code Playgroud)
或者,如果您不使用C#3:
List<DerivedClass> derivedList = baseList.ConvertAll<DerivedClass>(delegate
(BaseClass b) { return (DerivedClass) b; };
Run Code Online (Sandbox Code Playgroud)
这假设原始列表实际上充满了DerivedClass的实例.如果不是这种情况,请更改委托以基于给定的BaseClass创建适当的DerivedClass实例.
编辑:我不知道为什么我不发布LINQ解决方案:
List<DerivedClass> derivedList = baseList.Cast<DerivedClass>().ToList();
Run Code Online (Sandbox Code Playgroud)