System.ArgumentOutOfRangeException错误

时间:2016-11-01 15:31:52

标签: c#

using System;
using System.Text.RegularExpressions;
using System.Globalization;

public class Kata
{
   public static string ToCamelCase(string str)
   {
        TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
        string clearStr = Regex.Replace(myTI.ToTitleCase(str), @"_|-", "");
        return clearStr = str.Substring(0, 3) + clearStr.Remove(0, 3);     
   }
}

输入 - > ToCamelCase( “the_stealth_warrior”)

输入 - > ToCamelCase(以下简称 “隐身-勇士”)

  

错误:System.ArgumentOutOfRangeException:索引和长度必须   引用字符串中的位置。参数名称:长度

我做错了什么?

3 个答案:

答案 0 :(得分:0)

检查strclearStr长度。如果字符串长度小于您选择/删除的字符串,Substring将抛出此错误。

答案 1 :(得分:0)

如果Substring(0, 3)Remove(0, 3)短于str,则clearStr3会引发异常。我建议添加验证:

public static string ToCamelCase(string str) {
  // if str is null or too short 
  if (string.IsNullOrEmpty(str))
    return str;
  else if (str.Length < 3)
    return str;

  TextInfo myTI = new CultureInfo("en-US", false).TextInfo;
  string clearStr = Regex.Replace(myTI.ToTitleCase(str), @"_|-", "");

  // if clearStr is too short
  if (clearStr.Length < 3)
    return str;

  return clearStr = str.Substring(0, 3) + clearStr.Remove(0, 3);
}

答案 2 :(得分:0)

如果您将字符串作为str参数传递短于3个字符,则代码将抛出此异常。我建议在开头添加一个检查,并为这些值定义所需的结果。