Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 提供意外输出的可枚举_C#_Ienumerable_Enumerable - Fatal编程技术网

C# 提供意外输出的可枚举

C# 提供意外输出的可枚举,c#,ienumerable,enumerable,C#,Ienumerable,Enumerable,实际产量: 10 11 12 13 14 15 16 17 18 19 20 这个代码有什么问题?发生了什么?的第二个参数指定要生成的整数数,而不是范围中的最后一个整数 如果需要,可以很容易地构建自己的方法,或者更新现有的Foo.Range方法,从start和end参数生成范围。的第二个参数是要生成的项目数 为什么不是结束而是计数 如果有起点和终点,如何枚举空范围?例如,假设屏幕上有一个文本缓冲区和一个选择,并且该选择是一个字符,从字符12开始,到字符12结束。你如何列举这

实际产量:

10  11  12  13  14  15  16  17  18  19  20
这个代码有什么问题?发生了什么?

的第二个参数指定要生成的整数数,而不是范围中的最后一个整数

如果需要,可以很容易地构建自己的方法,或者更新现有的
Foo.Range
方法,从
start
end
参数生成范围。

的第二个参数是要生成的项目数

为什么不是结束而是计数

如果有起点和终点,如何枚举空范围?例如,假设屏幕上有一个文本缓冲区和一个选择,并且该选择是一个字符,从字符12开始,到字符12结束。你如何列举这个范围?从字符12开始枚举一个字符

现在假设选择为零个字符。你如何列举它?如果你有开始,大小,你只需通过零的大小。如果你有开始,结束,你会怎么做?你不能通过12级和12级

现在你可能会说“好吧,如果它是一个空范围,就不要枚举它”。所以你最终得到的代码应该是这样的:

10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29
而不是写作

var results = from index in Range(selectionStart, selectionSize)
              where blah blah blah
              select blah;
IEnumerable results=null;
如果(selectionSize==0)
{
结果=可枚举的.Empty();
}
其他的
{
结果=来自范围内的索引(selectionStart、selectionEnd)
什么地方
选择废话;
}

这伤了我的眼睛。

别忘了这是关于Enumerable而不是int的,因为很多(大多数?)Enumerable的“范围内的最后一项”没有多大意义。@Finnk:Enumerable.range的输出总是一个
IEnumerable
。如果
count
参数为零,则序列将为空,否则它将包含顺序整数。为什么不是
end
而是
count
?自由民主党有什么具体的设计目标吗?你可以让结束是独占的,开始是包含的,比如count==end-start,这允许你优雅地表示空范围。(Dijkstra同意,见EWD831)。但我很高兴事情是这样的,所以我不必记住关于包含或排除索引的细节。Joren:好的,那么如何表示以Int32.MaxValue结尾的范围?如果“end”必须比序列中的最后一个值大一个,那么您有一些选择。(1) 不要让该值成为序列中的最后一个值,(2)仅在这种情况下,将端点设为long而不是int。这两个看起来都是糟糕的设计。但您仍然有一个相关的问题:例如,您的范围不能从-1扩展到Int32.MaxValue,因为长度会溢出。使用Joren的方法,您实际上可以支持比当前方法更多的范围。@kvb:做得很好;我想知道是否有人会注意到我论点中的缺陷!:-)简言之,这两种方法都有利弊。
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;
}