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
相关产品推荐
相关产品推荐

