C#string toCharArray超出范围异常

时间:2014-07-07 09:32:36

标签: c# .net string exception char

我在修复别人的代码时遇到了这个问题。显然他们试图控制小数点后的数字,如下所示:

public static bool check_count(double d)
    {
        string str = d.ToString();
        bool b = true;
        if (str.IndexOf('.'))
        {
            char[] ch = str.ToCharArray(str.IndexOf('.'), str.Length - 1);
            if (ch.Length > 5)
                b = false;
        }
        return b;
    }

我不打算自己修理,因为我用正则表达式取而代之,但这让我很好奇。当ToCharArray不应该({!}}

时,ArgumentOutOfRangeException正在投掷string str = "20.222"; Console.WriteLine(str); int index = str.IndexOf('.'); if (index > -1) { Console.WriteLine(index); Console.WriteLine(str.Length-1); char[] ch = str.ToCharArray(index, str.Length - 1); }

让我们说

20.222
2
5

输出:

{{1}}

现场演示[here]

所以字符串是6个字符长,起始索引是2,什么参数超出了什么范围?

我觉得迷失了......有什么想法吗?

感谢

1 个答案:

答案 0 :(得分:6)

  

什么参数超出了什么范围?

好吧,我希望这个例外可以告诉你 - 但我也希望它是第二个参数。 (编辑:看看你实际得到的例外情况,即使是从.NET,它实际上是在责备第一个论点。不可否认,这是第一个和第二个参数组合无效,但在这种情况下责怪第二个参数更为明智,因为第一个单独有效。)

查看the documentation - 第二个参数是 length ,而不是结束索引。所以我怀疑你想要这样的东西:

char[] ch = str.ToCharArray(index, str.Length - index);

或者只需 .之后的数字

char[] ch = str.ToCharArray(index + 1, str.Length - index - 1);