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

C#-ASP.NET Core中按精确索引匹配两个数组的实现方法

解决方案

1. 准备与原数组索引严格对应的中文表头数组

先创建一个和properties数组长度完全一致、顺序完全匹配的中文字符串数组,每个索引位置的元素对应原数组对应位置的英文表头翻译:

var chineseHeaders = new[]
{
    "订单ID",
    "店铺ID",
    "订单GUID",
    "客户ID",
    "订单状态ID",
    "支付状态ID",
    "配送状态ID",
    "订单小计(含税)",
    "订单小计(不含税)",
    "订单小计折扣(含税)",
    "订单小计折扣(不含税)",
    "订单配送费(含税)",
    "订单配送费(不含税)",
    "支付方式附加费(含税)",
    "支付方式附加费(不含税)",
    "税率",
    "订单税费",
    "订单总计",
    "退款金额",
    "订单折扣",
    "汇率",
    "客户币种代码",
    "联盟ID",
    "支付方式系统名称",
    "到店自提",
    "配送方式",
    "配送费率计算方式系统名称",
    "自定义值XML",
    "增值税号",
    "创建时间(UTC)",
    "账单收件人姓氏",
    "账单收件人名字",
    "账单邮箱",
    "账单公司名称",
    "账单省份/州",
    "账单城市",
    "账单县/郡",
    "账单地址1",
    "账单地址2",
    "账单邮政编码",
    "账单联系电话",
    "账单传真号码",
    "配送收件人姓氏",
    "配送收件人名字",
    "配送邮箱",
    "配送公司名称",
    "配送省份/州",
    "配送城市",
    "配送县/郡",
    "配送地址1",
    "配送地址2",
    "配送邮政编码",
    "配送联系电话",
    "配送传真号码"
};

2. 按索引匹配替换表头

根据PropertyByName<T>类的可变性,分两种场景处理:

场景A:PropertyByName<T>支持修改表头名称(有可写的Name属性)

直接遍历数组,按索引替换表头:

// 先校验数组长度,避免索引越界
if (chineseHeaders.Length != properties.Length)
    throw new ArgumentException("中文表头数组长度必须与原属性数组完全一致");

for (int i = 0; i < properties.Length; i++)
{
    properties[i].Name = chineseHeaders[i];
}

场景B:PropertyByName<T>是不可变类(无修改入口)

创建新的实例数组,复用原属性的选择逻辑与忽略设置,仅替换表头:

// 校验长度
if (chineseHeaders.Length != properties.Length)
    throw new ArgumentException("中文表头数组长度必须与原属性数组完全一致");

var localizedProperties = properties.Select((prop, index) =>
    new PropertyByName<Order>(
        chineseHeaders[index],
        prop.PropertySelector,
        prop.Ignore
    )).ToArray();

核心注意事项

  • 必须严格保证chineseHeaders的长度、顺序与原properties完全对齐,否则会出现表头错位
  • 后续若原数组增减元素,需同步更新中文表头数组的对应位置
  • 若需支持多语言,可将中文表头替换为从资源文件(.resx)读取的对应语言字符串,便于扩展其他语种

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:40:33