如果我对集合执行.Select()
,结果集合是否会在两个集合之间共享精确的索引值。
也许我没有很好地解释自己。这就是我的意思:
int[] nums = new int[]{ 50, 100, 200};
var moreNums = nums.Select(num => num / 2);
moreNums [0] = 25? [1] = 50? [2] = 100?
你可以100%的时间用钱吗?因此,我总是对LINQ感到一种不安的感觉。这很重要,因为我有两个列表,我可以使用单个索引来引用两个列表之间的一对值。我不希望我的列表不同步。
答案 0 :(得分:6)
Select
方法逻辑非常简单:它从您source
集合中一次获取一个元素,应用selector
函数并生成结果。该功能称为延迟执行 - 在需要时从source
集合中提取元素,然后立即返回。
Select
可以写成如下:
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> selector)
{
foreach(var item in source)
{
yield return selector(source);
}
}
如您所见,无法使用 Select
方法以不同顺序获取商品!
在实践中,该方法看起来有点复杂,但逻辑完全相同。
答案 1 :(得分:1)
是的,它始终给出您期望的结果 我已经完成了这段代码并且它始终有效
List<decimal> MyList = new List<decimal>() { 10,20,30,40};
var Output= MyList.Select(s => s / 2).ToList();
Output
中的结果是
5
10
15
20
答案 2 :(得分:-1)
25 50 100
中的 case 1
。
0 50 100
中的 case 2
。
0 50 100
中的 case 3
。不是5 50
int[] nums = new int[]{ 50, 100, 200};
var moreNums = nums.Select(num => num / 2);
// case 1
foreach (var item in moreNums) Console.Write("{0} ", item);
Console.WriteLine();
// case 2
nums[0] = 0;
foreach (var item in moreNums) Console.Write("{0} ", item);
Console.WriteLine();
// case 3
nums = new int[]{ 10, 100 };
foreach (var item in moreNums) Console.Write("{0} ", item);
Console.WriteLine();