我需要一些语法糖的帮助。 我有一个ThisClass [3]和ThatClass [3]。
public class ThisClass
{
public string Thing1;
public string Thing2;
public string Thing3;
public string Thing4;
}
public class ThatClass
{
public string Thing1;
public string Thing2;
}
ThatClass数组中的每个实例都是基于数组ThisClass的相同位置的实例创建的。 所以ThatClass [0]的字段与ThisClass [0]具有相同的值,除了它只有2个字段而不是4个字段。
我想现在更新ThisClass数组中的每个实例,其中包含来自ThatClass数组中对象的匹配索引位置的字段。我可以做嵌套for循环,但我需要帮助思考LINQ选项。
ThisClass[0].Thing1 = ThatClass[0].Thing1;
ThisClass[0].Thing2 = ThatClass[0].Thing2;
有效,但我相信可以做得更好。使用C#,.NET 4.5。
答案 0 :(得分:7)
我认为不需要嵌套循环:
for (int i = 0; i < theseClasses.Length; i++)
{
theseClasses[i].Thing1 = thoseClasses[i].Thing1;
theseClasses[i].Thing2 = thoseClasses[i].Thing2;
}
您可以向CopyFrom(ThatClass)
添加ThisClass
方法,从而导致:
for (int i = 0; i < theseClasses.Length; i++)
{
theseClasses[i].CopyFrom(thoseClasses[i]);
}
......但这就是我要做的。 LINQ使用查询,不会造成副作用......我认为这不适合这里。
答案 1 :(得分:1)
注意:正如@Jon所说,LINQ不会导致副作用,如果你这样做,你可能会得到一个意外行为的代码(但它可能)。
此代码执行此操作:
ThisClass[] these = new ThisClass[100];
ThatClass[] those = new ThatClass[100];
// init these and those items
those.Zip(these, (that, @this) =>
{
@this.Thing1 = that.Thing1;
@this.Thing2 = that.Thing2;
return that;
}).ToList();
答案 2 :(得分:-1)
当您要求LINQ时...这将为您提供无关 IEnumerable<ThisClass>,
,并且不会修改原始数组。
(我假设thisClass
和thatClass
数组分别称为thisArray
和thatArray
thisArray.Select((n, x) => { n.Thing1 = thatArray[x].Thing1; n.Thing2 = thatArray[x].Thing2; return n; }).ToArray();
(如果您真的想要LINQ并分配它,只需将其分配回原始数组)