2

我正在尝试获取 linqs 可枚举范围的上限,例如:

Enumerable.Range(0, 3).Select(x => "index: " + x + " Max: ").ToList();

该列表应具有:

index: 0 Max: 3
index: 1 Max: 3
index: 2 Max: 3
...
4

3 回答 3

7

你不能,不完全是。您的 lambda 函数将始终在实例范围内执行。

你可以这样做:

var range = Enumerable.Range(0, 3);
range.Select(x => "index: " + x + " Max: " + range.Max()).ToList();

但是你也可以这样做:

var range = Enumerable.Range(0, 3);
var max = range.Max();
range.Select(x => "index: " + x + " Max: " + max).ToList();

[ 0, 1, 2 ]顺便说一句,由于您.Count()使用的范围从零开始(

于 2013-05-28T20:54:57.453 回答
2

你不能。的输入Select可以是任何序列,并且它可能根本没有上限(嗯,显然该值不能超过Int32.MaxValue,但除此之外,没有办法知道)。

在您的情况下,由于 的参数Enumerable.Range是硬编码的,显然您可以推断出最大值,即start + count - 1 = 2. 请注意, 3 是计数,而不是最大值;它恰好是唯一的上限,但这只是因为起始值为 0。

于 2013-05-28T20:54:53.030 回答
0
var range = Enumerable.Range(0, 3);
var max = range.Max();
var s = range.Select(x => string.Format("Index: {0}, Max: {1}", x, max));
于 2013-05-28T20:55:50.760 回答