0

我需要一些语法糖方面的帮助。我有一个 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 个。

我现在想用 ThatClass 数组中对象的匹配索引位置的字段更新 ThisClass 数组中的每个实例。我可以做嵌套的 for 循环,但我需要帮助来思考一个 LINQ 选项。

 ThisClass[0].Thing1 = ThatClass[0].Thing1; 
 ThisClass[0].Thing2 =  ThatClass[0].Thing2;

工作,但我相信可以做得更好。使用 C#、.NET 4.5。

4

3 回答 3

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 与查询有关,不会引起副作用......我认为它不适合这里。

于 2013-05-17T20:15:11.423 回答
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();
于 2013-05-17T21:06:03.770 回答
-1

当您要求使用 LINQ 时...这将使您获得一个不相关 IEnumerable<ThisClass>,的并且不会修改原始数组。(我假设thisClassandthatClass数组分别被称为thisArrayand thatArray

thisArray.Select((n, x) => { n.Thing1 = thatArray[x].Thing1; n.Thing2 = thatArray[x].Thing2; return n; }).ToArray();

(如果您真的想要 LINQ 并对其进行分配,只需将其分配回原始数组即可)

于 2013-05-17T20:25:59.890 回答