【问题标题】:Out of Range Exception - Substring - C#超出范围异常 - 子字符串 - C#
【发布时间】:2015-01-28 20:27:23
【问题描述】:

我有一个电话号码列表,有些带有分机号,有些没有。 我正则表达式我的电话号码只返回数字。

然后我为前 10 位数字(区号 + 号码)创建一个字符串。

我比较了这个字符串的长度并将其与原始字符串进行比较。 如果有区别,我用余数作为扩展名。

在下面的代码中,我不断收到超出范围的异常。我已经调试过了,它似乎没有超出范围。有人看到我错过了什么吗?

var prePhone = emp.y.PhoneNumber;

if (!string.IsNullOrEmpty(prePhone))
{
    string xPhone = Regex.Replace(prePhone, "[^0-9]", "");
    string number = xPhone.Substring(0, 10);
    int extMath = xPhone.Length - number.Length;

    if (extMath >= 1)
    {   int preExt = 9 + extMath;
        string ext = xPhone.Substring(10, preExt);//Out of range exception
        em.Phone = beautifyPhoneNumber(number, ext);
    }
    else {
        string ext = null;
        em.Phone = beautifyPhoneNumber(number, ext);
    }
}

【问题讨论】:

  • “似乎没有超出范围”。您能否发布导致异常的确切字符串?
  • @dariogriffo 它在代码中的注释中注明。
  • 请您告诉我们错误的堆栈跟踪是什么,表明您的源代码中的哪一行是问题
  • 我们好奇的是,当异常发生时,xPhone 和 preExt 的值是什么。
  • 不应该是xPhone.Substring(10, extMath)吗?看到你在你的 preExt 中添加 9,你会得到一个 (10, 11) 的子字符串?

标签: c# regex


【解决方案1】:
string ext = xPhone.Substring(10, preExt)

第二个参数不是结束索引,它是要提取的字符串的长度。

由于您的代码中的 preExt > 10,xPhone 的长度必须超过 20 个字符(因为您从索引 10 开始),否则将引发异常。

【讨论】:

猜你喜欢
  • 2014-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多