【问题标题】:C# string toCharArray out of range exceptionC# 字符串 toCharArray 超出范围异常
【发布时间】: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


【解决方案1】:

什么参数超出了范围?

好吧,我希望这个例外会告诉你——但我也希望它是第二个参数。 (编辑:看看你实际得到的异常,即使是从.NET,它实际上是在指责第一个参数。诚然,这是第一个和第二个参数的组合是无效的,但在这种情况下责怪第二个参数更明智,因为第一个本身是有效的。)

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

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

或者只获取.之后的数字

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

【讨论】:

  • 男人!我讨厌字符 -_- 我用正则表达式替换它并克服了,但知道总是很高兴 :^) 非常感谢(& 在 2 分钟内接受这么说)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多