简体   繁体   English

如何在C#中使用linq查询中的局部变量?

[英]How to use local variable in linq query in C#?

I have an array of integers say int[] vals . 我有一个整数数组说int[] vals

I want to use linq query to get a list of points from this array of ints. 我想使用linq查询从这个int数组中获取一个点列表。

For example if i have array like this: 例如,如果我有这样的数组:

vals = new int[]{20,25,34}; 

I want my list of points as 我希望我的积分列表为

var points = List<Point>{new Point(1,20),new Point(2,25),new Point(3,34)};

I want to use a local variable which is incremented by 1 for all int values in my array which will be the x value of my point. 我想使用一个局部变量,对于我的数组中的所有int值,它将增加1,这将是我的点的x值。

How can I achieve this result using LINQ in C# ? 如何在C#中使用LINQ实现此结果?

You could use the 2nd overload of Select : 您可以使用Select的第二个重载:

var list = vals.Select((val, idx) => new Point(idx + 1, val)).ToList();

where idx is the index of val in vals . 其中idxindexvalvals

var vals = new int[]{20,25,34};
var x = 1;
var points = vals.Select((val) => new Point(x++,val)).ToList();

Or a third option - get an ordinal enumeration and project using that and your original array. 或者第三个选项 - 使用它和原始数组获取序数枚举和项目。

var points = Enumerable.Range(1, vals.Count())
    .Select(i => new Point(i, vals[i - 1])).ToList();
        var vals = new int[] { 20, 25, 34 };
        int i = 0;
        var points = vals.ToList().ConvertAll(delegate(int v) { return new Point(++i, v); });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM