我在修复别人的代码时遇到了这个问题。显然他们试图控制小数点后的数字,如下所示:
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,什么参数超出了什么范围?
我觉得迷失了......有什么想法吗?
感谢
答案 0 :(得分:6)
什么参数超出了什么范围?
好吧,我希望这个例外可以告诉你 - 但我也希望它是第二个参数。 (编辑:看看你实际得到的例外情况,即使是从.NET,它实际上是在责备第一个论点。不可否认,这是第一个和第二个参数组合无效,但在这种情况下责怪第二个参数更为明智,因为第一个单独有效。)
查看the documentation - 第二个参数是 length ,而不是结束索引。所以我怀疑你想要这样的东西:
char[] ch = str.ToCharArray(index, str.Length - index);
或者只需 .
之后的数字
char[] ch = str.ToCharArray(index + 1, str.Length - index - 1);