c#字符串分割-索引越界

本文关键字:索引 越界 分割 字符串 | 更新日期: 2023-09-27 17:53:14

我的大脑现在很累,不能想出一个简单的解决方案。

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

如果没有| split,那么它会抛出一个错误,这将是一个快速而优雅的方式,只是抛出一个默认的"no Name"或传递它。我只关心位置[0]和[1]。

示例数据
Tom | huntard@123.com
Tom
Tom | huntard@123.com
Tom | huntard@123.com | texas

我需要红牛。

c#字符串分割-索引越界

您可以使用System.Linq命名空间的ElementAtOrDefault()扩展方法和空合并运算符(??)来获得一个优雅的解决方案:

return String.Format("Name: {0} <br /> Email: {1}", 
    res.ElementAtOrDefault(0) ?? "No name", 
    res.ElementAtOrDefault(1) ?? "No email");

如何为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"));

添加对名称是否有值的检查,以验证第一项,并为其余项添加对数组长度的内联检查。

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");
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";

检查res的长度,如果没有res[1]则插入默认值

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

你可以把

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

string 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 **