我有这个设置:
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;
}
答案 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]);