首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用反射将List<TBase>转换为List<TChild> (不使用Linq Cast<>)?

使用反射将List<TBase>转换为List<TChild>的方法如下:

  1. 首先,创建一个空的List<TChild>对象,用于存储转换后的结果。
  2. 遍历原始的List<TBase>,对于每个元素,使用反射获取其类型信息。
  3. 判断该元素的类型是否为TChild或TChild的子类。如果是,则直接将该元素添加到结果列表中。
  4. 如果该元素的类型不是TChild或TChild的子类,那么需要使用反射创建一个TChild的实例,并将原始元素的属性值复制到新创建的实例中。
  5. 将新创建的TChild实例添加到结果列表中。

下面是一个示例代码:

代码语言:txt
复制
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<>方法,而是通过判断类型和属性复制来实现转换。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券