如何在Enumerable.Range中获取上限

时间:2013-05-28 20:51:25

标签: c# linq

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

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

列表应该有:

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

3 个答案:

答案 0 :(得分: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 ]),因此最大值将为2,而不是3.您想要.Count()代替还是否?

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

var range = Enumerable.Range(0, 3);
var max = range.Max();
var s = range.Select(x => string.Format("Index: {0}, Max: {1}", x, max));