class Foo
{
public static IEnumerable<int> Range(int start, int end)
{
return Enumerable.Range(start, end);
}
public static void PrintRange(IEnumerable<int> r)
{
foreach (var item in r)
{
Console.Write(" {0} ", item);
}
Console.WriteLine();
}
}
class Program
{
static void TestFoo()
{
Foo.PrintRange(Foo.Range(10, 20));
}
static void Main()
{
TestFoo();
}
}预期输出:
10 11 12 13 14 15 16 17 18 19 20实际输出:
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29这段代码有什么问题?发生什么事了?
发布于 2010-03-18 21:34:02
Enumerable.Range的第二个参数指定要生成的整数数,而不是范围中的最后一个整数。
如果需要,可以很容易地构建自己的方法,或者更新现有的Foo.Range方法,从start和end参数生成一个范围。
发布于 2010-03-18 21:34:30
Range的第二个参数是要生产的产品数量。
发布于 2010-03-18 22:25:00
为什么不是结束而是计数?
如果有起始点和结束点,如何枚举空范围?例如,假设屏幕上有一个文本缓冲区和一个选择,并且选择的是从字符12开始到字符12结束的单个字符,如何枚举该范围?枚举一个从字符12开始的字符。
现在假设选择为零个字符。你如何枚举它?如果你有start,size,你只需要传递0作为size。如果你有开始,结束,你会怎么做?你不能超过12和12。
现在你可能会说“好吧,如果它是一个空的范围,就不要枚举它”。所以你最终得到的代码应该是这样的:
var results = from index in Range(selectionStart, selectionSize)
where blah blah blah
select blah;而不是写
IEnumerable<Chicken> results = null;
if (selectionSize == 0)
{
results = Enumerable.Empty<Chicken>();
}
else
{
results = from index in Range(selectionStart, selectionEnd)
where blah blah blah
select blah;
}这会伤到我的眼睛。
https://stackoverflow.com/questions/2470130
复制相似问题