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,什么参数超出了什么范围?
我觉得迷失在这......任何想法?
谢谢
什么参数超出了什么范围?
好吧,我希望这个例外可以告诉你 - 但我也希望它是第二个参数.(编辑:看看你实际得到的例外情况,即使是从.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)