You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将列表类对象属性按规则映射到另一个类的对应属性

C# 不同类属性映射实现方案

方案1:硬编码Switch实现(性能最优,适合属性固定场景)

无需额外依赖,逻辑清晰易调试,运行效率最高。

public category MapCategoryListToCategory(IEnumerable<categoryList> categoryLists)
{
    var result = new category();
    foreach (var item in categoryLists)
    {
        // 跳过非法空值
        if (string.IsNullOrWhiteSpace(item.categoryType) || string.IsNullOrWhiteSpace(item.categoryQuantity))
            continue;
        // 转换数量为int类型
        if (!int.TryParse(item.categoryQuantity, out var quantity))
            continue;

        switch (item.categoryType.Trim())
        {
            case "categoryA":
                result.categoryACount = quantity;
                break;
            case "categoryB":
                result.categoryBCount = quantity;
                break;
            case "categoryC":
                result.categoryCCount = quantity;
                break;
            case "categoryD":
                result.categoryDCount = quantity;
                break;
        }
    }
    return result;
}
  • 优势:性能无损耗,逻辑明确,排查问题简单,适合分类数量固定不会频繁新增的场景。

方案2:反射实现(扩展性强,适合属性频繁扩展场景)

通过属性名匹配自动赋值,后续新增分类无需修改映射逻辑。

public category MapCategoryListToCategoryByReflection(IEnumerable<categoryList> categoryLists)
{
    var result = new category();
    var categoryTypeInfo = typeof(category);
    
    foreach (var item in categoryLists)
    {
        // 跳过非法空值
        if (string.IsNullOrWhiteSpace(item.categoryType) || string.IsNullOrWhiteSpace(item.categoryQuantity))
            continue;
        if (!int.TryParse(item.categoryQuantity, out var quantity))
            continue;
        
        // 按照规则拼接目标属性名
        var targetPropertyName = $"{item.categoryType.Trim()}Count";
        // 查找对应属性
        var propertyInfo = categoryTypeInfo.GetProperty(targetPropertyName);
        // 属性存在且类型匹配才赋值
        if (propertyInfo != null && propertyInfo.PropertyType == typeof(int?))
        {
            propertyInfo.SetValue(result, quantity);
        }
    }
    return result;
}
  • 优势:后续新增分类只需给category类新增对应categoryXCount属性即可自动完成映射,无需调整映射代码。

注意:如果categoryType字段值存在大小写不一致的情况,可在匹配逻辑中增加忽略大小写的配置,避免匹配失败。

内容的提问来源于stack exchange,提问作者user16821841

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:24:06