首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >List<T>.GetRange抛出参数异常

List<T>.GetRange抛出参数异常
EN

Stack Overflow用户
提问于 2017-01-02 15:59:40
回答 1查看 1.4K关注 0票数 0

我正在使用List在c#中研究一个合并排序算法,我得到了一个奇怪的错误。

代码语言:javascript
复制
class SortingAlgorithms
{
    public static List<int> mergeSort(List<int> array)
    {
        if (array.Count == 1)
            return array;

        List<int> a1 = array.GetRange(0, (int)array.Count / 2);
        int x = array.Count - 1;
        int y = array.Count/2 + 1;
        List<int> a2 = array.GetRange(y, x);
        ...

此代码引发以下异常:偏移量和长度超出了数组或计数的范围,大于从索引到源集合末尾的元素数。

这似乎相当简单。但事实并非如此。在调试这些值时,您可以看到:

array.Count =8

a1.Count =4

X=7

Y=5

a2 =空

我的问题是:为什么我不能在一个包含8个元素的数组中得到5-7的范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-02 16:02:38

因为GetRange的签名不是GetRange(lower, upper),而是GetRange(index, count)。请注意,错误消息涉及偏移量和长度。

换句话说:它不返回范围[y, x],而是返回从y开始的x元素。

要将元素从y获取到x (包括y和x),请使用GetRange(y, y - x + 1)。在您的例子中,这将是array.GetRange(y, array.Count - y)

PS:由于您的array实际上不是一个数组,我建议您使用不同的变量名。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41429863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档