【问题标题】:String matching exception ArgumentOutOfRangeException字符串匹配异常 ArgumentOutOfRangeException
【发布时间】:2014-08-24 10:48:29
【问题描述】:

我在 C# 控制台应用程序中做一个简单的字符串匹配,我想得到这个异常: 在 mscorlib.dll 中发生了“System.ArgumentOutOfRangeException”类型的未处理异常

后跟额外信息:索引和长度必须引用字符串中的位置。

我不知道如何解释这个..

这是我的代码:

static void Main(string[] args)
{
    var b = "bananas";
    for (int i = 0; i < b.Length; i++)
    {
        for (int j = 0; j < b.Length; j++)
        {
            var current = b.Substring(i, j);
            Console.WriteLine("{0} - {1}", b.Contains(current), current);
        }
    }
    Console.ReadLine();
}

我感兴趣的只是错误的原因和解决方法/解决方案 - 即我显然缺乏正确的理解。 提前致谢!

【问题讨论】:

  • 错误应该是不言自明的。您传递给b.Substring 的参数未描述字符串b 中的有效子字符串。
  • 您的代码没有意义。您正在从字符串中获取子字符串,然后检查该字符串是否包含该子字符串。它不总是true吗?
  • 感谢您的评论,而不是仅仅按下投票按钮。不知何故,这对我来说不是那么不言自明,但你的描述会有所帮助。

标签: c# string substring


【解决方案1】:

String.Substring 的第二个参数是Length,因此您传递给Substring 的参数使其失败。

这是您需要的固定线路:

for (int j = 0; j < b.Length - i; j++)

Ideone:http://ideone.com/4Je2MD

【讨论】:

  • 是的,这就是解决方案。现在我很清楚了。谢谢。
  • 不,它没有给出相同的异常,它完美地工作并提供了预期的结果!
  • @Selman22 这给出了System Error 500,这是一个 HTTP 错误代码(内部服务器错误)。 dotnetfiddle 服务似乎已关闭。检查 ideone 链接。
  • @LucasTrzesniewski 抱歉,我读错了。它是 b.Length - 我不是 b.Length - 1
  • 没问题,我完全可以理解这种困惑;)
猜你喜欢
  • 1970-01-01
  • 2022-12-24
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多