(否决票需要解释)
简单的问题:我的 Linq 有什么问题。我希望将列表的值替换为其索引。和我想的一样简单:
var dd = myList.Select((x, i) => new {x=i});
dd
是空的。我不是 Linq 的专家,我正在学习它是如何工作的。
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);
不要使用 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();
var dd = myList.Select(i => myList.IndexOf(i));
这应该可以解决问题