【发布时间】:2014-08-27 17:51:07
【问题描述】:
我在修复别人的代码时遇到了这个问题。显然他们试图像这样控制小数点后的数字:
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
现场演示[here]
所以字符串长度为 6 个字符,起始索引为 2,什么参数超出了什么范围?
我对此感到迷失......有什么想法吗?
谢谢
【问题讨论】:
-
ToCharArray 的第二个参数是长度,不是索引
标签: c# .net string exception char