-3

(否决票需要解释)

简单的问题:我的 Linq 有什么问题。我希望将列表的值替换为其索引。和我想的一样简单:

var dd = myList.Select((x, i) => new {x=i});

dd是空的。我不是 Linq 的专家,我正在学习它是如何工作的。

4

3 回答 3

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);
于 2013-11-13T13:46:40.847 回答
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();
于 2013-11-13T13:41:37.693 回答
-1
var dd = myList.Select(i => myList.IndexOf(i));

这应该可以解决问题

于 2013-11-13T13:39:04.667 回答