在 C# 中使用子字符串函数会给出 ArgumentOutOfRangeException 异常

本文关键字:ArgumentOutOfRangeException 异常 函数 字符串 | 更新日期: 2023-09-27 18:37:02

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

我的代码看起来像

string pidnew= pid.Substring(3,5)

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

在 C# 中使用子字符串函数会给出 ArgumentOutOfRangeException 异常

要从像 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"

如果只有一个数字,你可以只正则表达式

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

而且您无需担心位置

如果要在状态 ID 上匹配:

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

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

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

MSDN 文档:

参数

启动索引 类型:系统.Int32 此实例中子字符串的起始字符位置。

长度 类型:系统.Int32 子字符串中的字符数。

相关文章:
  • 没有找到相关文章