繁体   English   中英

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

[英]C# string split - index out of bounds

我的大脑现在很累,无法解决这个问题。

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

我需要一只红牛。

您可以将System.Linq命名空间中的ElementAtOrDefault()扩展方法与null-coalescing运算符( ?? )结合使用,以获得一种优雅的解决方案:

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 

字符串d =“ int afg;”;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM