在list1中设置list2中的成员

时间:2018-02-22 10:00:48

标签: c# linq

我有这个设置:

class Person
{
    public int Age { get; set; }
}

static void Main()
{
    int[] nums = { 1, 2, 3 };
    Person[] persons = { new Person(), new Person(), new Person() }

    for (int i = 0; i < persons.Length; i++)
    {
        persons[i].Age = nums[i];
    }

    persons.ToList().ForEach(p => Console.WriteLine(p.Age));
}

所以每个人&#39;年龄设定。

是否可以用LINQ中的东西替换for循环?
我试过这个:

persons.Zip(nums, (person, num) => person.Age = num);

编译并运行,但结果不正确......

更新
答案和评论是非常有用的反馈 我会按照建议使用 foreach循环

foreach (var item in person.Zip(nums, Tuple.Create))
{
    item.Item1.Age = item.Item2;
}

4 个答案:

答案 0 :(得分:0)

您的问题的答案将是在这种特殊情况下不使用LINQ。我的建议是避免滥用像.ToList(), .ToArray()等LINQ方法,因为它会对性能产生巨大影响。您遍历集合并创建新集合。通常简单foreach比一系列LINQ方法更易读和可理解。

答案 1 :(得分:-1)

Linq不会修改集合 只有一种方法可以继续

  Isolate1 Isolate2 Isolate3 Isolate4
0   ------      NaN      AGT   AGTCTA
1      ---      ABC      NaN      NaN
2        A        A        A        A

之后,每个人都会提供年龄。

答案 2 :(得分:-4)

Linq通常用于查询和转换某些数据。

如果您可以更改function Redirect() { history.pushState("", document.title, window.location.pathname);//remove #section } 的创建方式,这将是最佳方法:

persons

如果您已有人员列表,请使用Person[] persons = nums.Select(n => new Person { Age = n }).ToArray(); 循环。 LinQ应仅用于查询,而不是用于修改

答案 3 :(得分:-4)

你可以用linq来做,但你最好使用一个简单的for循环。

这是一种(复杂的)方式:

persons
    .Select((x, i) => new {Person = x, Id =i})
    .ToList()
    .ForEach(x=> x.Person.Age = nums[x.Id]);