在C#中使用substring函数会产生ArgumentOutOfRangeException异常

时间:2013-10-25 17:17:21

标签: c# asp.net asp.net-mvc

如何从string pid = {id=2}中提取值2。

我的代码看起来像

string pidnew= pid.Substring(3,5)

它向我显示错误,我做错了什么?

3 个答案:

答案 0 :(得分:2)

要从string pid = "{id=2, genderid=5, stateid=4}"这样的字符串中获取单个值,您可以使用以下方法:

public string GetValue(string idPart, string test)
{
    var escIdPart = Regex.Escape(idPart);
    var pattern = string.Format("(?<=[\\{{\\s,]{0}\\s*=\\s*)\\d+", escIdPart);
    var result = default(string);
    var match = Regex.Match(test, pattern, RegexOptions.IgnoreCase);
    if (match.Success)
    {
        result = match.Value;
    }
    return result;
}

...

var pid = "{id=2, genderid=5, stateid=4}";

var id = GetValue("id", pid); // returns "2"
var genderid = GetValue("genderid", pid); // returns "5"
var stateid = GetValue("stateid", pid); // returns "4"

答案 1 :(得分:1)

如果只有一个号码,你可以只使用Regex

string pidnew = Regex.Match(pid, @"\d+").Value;

您无需担心位置

如果你想在stateid上匹配:

string pidnew = Regex.Match(pid, @"(?<=stateid=)\d+",RegexOptions.IgnoreCase).Value;

答案 2 :(得分:0)

Substring的第二个参数表示要采用的字符数。因此,如果你有字符串&#34; {id = 2}&#34;并执行string pidnew= pid.Substring(3,5),您所说的是:&#34;从字符串中的字符索引3开始(第四个字符),并取五个字符&#34;。这意味着字符串长度至少需要8个字符。由于您只想获取一个字符,因此将第二个参数更改为1.如果括号是字符串的一部分,则还应从索引4而不是3开始。

您实际需要的是:string pidnew= pid.Substring(4,1);

MSDN Docs:

  

参数

     

的startIndex   键入:System.Int32   此实例中子字符串从零开始的起始字符位置。

     

长度   键入:System.Int32   子字符串中的字符数。