C#string toCharArray超出范围异常

Kat*_*tia 0 .net c# 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;
    }
Run Code Online (Sandbox Code Playgroud)

我不打算自己修理,因为我用正则表达式替换它但它让我好奇.在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);
}
Run Code Online (Sandbox Code Playgroud)

输出:

20.222
2
5
Run Code Online (Sandbox Code Playgroud)

现场演示[这里]

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

我觉得迷失在这......任何想法?

谢谢

Jon*_*eet 6

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

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

查看文档 - 第二个参数是长度,而不是结束索引.所以我怀疑你想要的东西:

char[] ch = str.ToCharArray(index, str.Length - index);
Run Code Online (Sandbox Code Playgroud)

或者得到的只是数字之后.:

char[] ch = str.ToCharArray(index + 1, str.Length - index - 1);
Run Code Online (Sandbox Code Playgroud)