(请投票需要解释)
简单的问题:我的Linq出了什么问题。我希望列表的值被其索引替换。我想的很简单:
var dd = myList.Select((x, i) => new {x=i});
dd
为空。我不是Linq的专家,我正在学习它是如何工作的。
答案 0 :(得分:1)
不要使用linq来修改集合。 Linq用于查询,它不是为修改集合而设计的。
LINQ => 语言集成查询
" Q"代表"查询"。
对于你的问题,我认为这没有道理。索引将是" 0 - count-1"
var dd = Enumerable.Range(0, myList.Count).ToList();
这应该这样做。
<小时/> 我想你的意思是这个?
var dd = myList.Select((x, i) => new { Value = x, Index = i}).ToList();
答案 1 :(得分:1)
Linq不应该用于修改集合。您可以使用Select
创建包含索引的新列表。
var dd = myList.Select((x, i) => i).ToList();
关于你的评论
我想根据它的索引来操作x的值。
通常使用foreach
循环来完成此操作,但可以使用Select
var dd = items.Select((x, i) => i % 42 == 0 ? 10 : x);
或更一般地
public static class EnumerableExtensions
{
public static IEnumerable<T> Replace<T>(
this IEnumerable<T> collection,
Func<T, bool> predicate,
T value
)
{
return collection.Select((x, i) => predicate(x) ? value : x);
}
public static IEnumerable<T> Replace<T>(
this IEnumerable<T> collection,
Func<T, int, T> predicate,
T value
)
{
return collection.Select((x, i) => predicate(x, i) ? value : x);
}
}
var dd = items.Replace((x, i) => i % 42 == 0, 10);
答案 2 :(得分:-1)
var dd = myList.Select(i => myList.IndexOf(i));
这应该可以解决问题