循环访问每行列表属性
本文关键字:列表 属性 访问 循环 | 更新日期: 2023-09-27 18:34:30
我目前有以下一段代码:
public string ReplaceData(List<ListData> list, string emailBody)
{
foreach (var item in list)
{
emailBody = emailBody.Replace("<Item1>", list.FirstOrDefault().Item1);
emailBody = emailBody.Replace("<Item2>", list.FirstOrDefault().Item2);
emailBody = emailBody.Replace("<Item3>", list.FirstOrDefault().Item3);
emailBody = emailBody.Replace("<Item4>", list.FirstOrDefault().Item4);
emailBody = emailBody.Replace("<Item5>", list.FirstOrDefault().Item5);
emailBody = emailBody.Replace("<Item6>", list.FirstOrDefault().Item6);
}
...
}
是否可以循环访问列表的每一行属性,获取每个属性名称和值,而不是每次都重复上述替换,因此只需要一个替换,因为它将逐个循环遍历每行属性,而不是每一行及其所有包含的属性?
我以前从未这样做过,因此如果需要,我可以提供其他信息。这需要尽可能高效,因为平均而言,我将有大约 15,000 行数据要迭代,因此反射可能不是实现我想要的最有效方法。
当前列表需要从中更改:
第 1 行
项目1 名称 项目 1 值,
项目 2 名称 项目 2 值,
项目3 名称 项目 3 值
对此:
第 1 行
项目1 名称 项目 1 值
第 2 行
项目2 名称 项目 2 值
第 3 行
项目3 名称 项目 3 值
像这样的事情怎么样(使用反射(:
public string ReplaceData(List<ListData> list, string emailBody)
{
foreach (var item in list)
{
foreach (var property in item.GetType().GetProperties())
{
string stringToReplace = string.Format("<{0}>", property.Name.ToString());
string valueToReplaceWith = property.GetValue(item, null).ToString();
emailBody = emailBody.Replace(stringToReplace, valueToReplaceWith);
}
}
如果您不想通过名称引用属性,则只能通过反射来执行此操作。因为列表中的每个项目都有 6 个属性 -(项目1,项目2,...项目6(。
或者,您可以使用并行foreach,这可能会加快
Parallel.ForEach(list,(item) =>
{
emailBody = emailBody.Replace("<Item1>", list.FirstOrDefault().Item1);
emailBody = emailBody.Replace("<Item2>", list.FirstOrDefault().Item2);
emailBody = emailBody.Replace("<Item3>", list.FirstOrDefault().Item3);
emailBody = emailBody.Replace("<Item4>", list.FirstOrDefault().Item4);
emailBody = emailBody.Replace("<Item5>", list.FirstOrDefault().Item5);
emailBody = emailBody.Replace("<Item6>", list.FirstOrDefault().Item6);
});