使用反射将List<TBase>转换为List<TChild>的方法如下:
下面是一个示例代码:
public static List<TChild> ConvertList<TBase, TChild>(List<TBase> baseList) where TChild : TBase
{
List<TChild> childList = new List<TChild>();
foreach (TBase baseItem in baseList)
{
if (baseItem is TChild)
{
childList.Add((TChild)baseItem);
}
else
{
Type childType = typeof(TChild);
TChild childItem = (TChild)Activator.CreateInstance(childType);
PropertyInfo[] properties = baseItem.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
PropertyInfo childProperty = childType.GetProperty(property.Name);
if (childProperty != null && childProperty.CanWrite)
{
childProperty.SetValue(childItem, property.GetValue(baseItem));
}
}
childList.Add(childItem);
}
}
return childList;
}
这个方法使用了反射来动态创建对象和复制属性值,可以将List<TBase>转换为List<TChild>,并保留原始对象的属性值。
请注意,这个方法并不使用Linq的Cast<>方法,而是通过判断类型和属性复制来实现转换。
领取专属 10元无门槛券
手把手带您无忧上云