C#字符串分割 - 索引超出范围

6

我的头脑现在很疲惫,无法想出一个简单的解决方案。

var res = error.Split('|');
return String.Format("Name: {0} <br /> Email: {1}", res[0] , res[1]);

如果没有 | 分隔符,则会抛出错误。有什么快速优雅的方式来仅使用默认值 "No Name" 或跳过它。我只关心位置 [0] 和 [1]。

示例数据

Tom | huntard@123.com
Tom
Tom | huntard@123.com
Tom | huntard@123.com | texas

我需要一罐红牛。

1
检查 res 的长度,如果没有 res[1],则插入默认值。 - Brian Rasmussen
2
var res = (error + "|无名氏").Split('|'); - Hans Passant
7个回答

8
您可以使用System.Linq命名空间中的ElementAtOrDefault()扩展方法结合空合并运算符(??)来实现优雅的解决方案:
return String.Format("Name: {0} <br /> Email: {1}", 
    res.ElementAtOrDefault(0) ?? "No name", 
    res.ElementAtOrDefault(1) ?? "No email");

4

你可以给 IList<T> 添加一个扩展方法:

public static T IndexOrDefault<T>(this IList<T> list, int index, T defaultValue)
{
    if (index < 0 || index >= list.Count)
    {
        return defaultValue;
    }

    return list[index];
}

那么你可以像这样使用它:
var res = error.Split('|');
return String.Format("Name: {0} <br /> Email: {1}", res[0] , res.IndexOrDefault(1, "No E-mail"));

你可以使用标准的LINQ ElementAtOrDefault()方法和空值合并运算符来完成相同的操作...请参考我的答案。 - luksan

3

在验证第一个项目时,添加一个检查名称是否有值的检查,并在其余部分中内联检查数组的长度。

var res = error.Split('|');
return String.Format("Name: {0} <br /> Email: {1}", 
                     !String.IsNullOrEmpty(res[0]) ? res[0] : "No Name", 
                     res.Length > 1 ? res[1] : "No Email");

1
String[] res = error.Split('|');

if (res.Length >= 1)       
    return String.Format("Name: {0} <br /> Email: {1}", res[0] , res[1]);

// Else return a plain message...
return "Error";

0
检查 res 的长度,如果不存在 res[1] ,则插入默认值。
return String.Format("Name: {0} <br /> Email: {1}", res[0] , res.Length > 1 ? res[1] : "N/A");

0

你可以直接放在顶部:

    if(error.Contains("|"))
     {return "No Name";}

var res = error.Split('|');
return String.Format("Name: {0} <br /> Email: {1}", res[0] , res[1]);
If 

0

字符串 d = "int a f g;";

        string[] row = d.Split(';');
        foreach (string c in row)
        {
            string[] col = c.Split(' ');
            dataGridView1.Rows.Add(col[0],col[1]);

       }//this code show string col only one length **

1
有没有人能解释为什么第一个索引值出现了? - Muhammad Shahrukh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接