2013-01-15 40 views
5

Não của tôi đang mệt mỏi ngay bây giờ và không thể đưa ra một giải pháp đơn giản cho việc này.C# string split - index ngoài giới hạn

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

Nếu không có | phân chia sau đó nó ném một lỗi những gì sẽ là một cách nhanh chóng và duyên dáng để chỉ cần ném trong một mặc định "Không Tên" hoặc vượt qua trên nó. Tôi chỉ quan tâm đến các vị trí [0] và [1].

mẫu dữ liệu

Tom | [email protected] 
Tom 
Tom | [email protected] 
Tom | [email protected] | texas 

Tôi cần một redbull.

+1

Kiểm tra độ dài của độ phân giải và chèn mặc định nếu không có res [1]. –

+0

'Nếu (res.Length> 1)' –

+2

var res = (lỗi + "| Không có tên"). Split ('|'); –

Trả lời

6

Bạn có thể sử dụng phương pháp ElementAtOrDefault() nối dài ra khỏi không gian tên System.Linq kết hợp với các nhà điều hành null-coalescing (??) cho một giải pháp thanh lịch:

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

Làm thế nào về bạn thêm một phương pháp khuyến nông để 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]; 
} 

Sau đó, bạn có thể sử dụng nó như thế này:

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

+1 Dòng mã khác nhưng mạnh mẽ. Rất đẹp. – Ulises

+0

Bạn có thể làm điều tương tự với phương thức LINQ ElementAtOrDefault() chuẩn và toán tử kết hợp null ... xem câu trả lời của tôi. – luksan

+0

+1 Tôi thực sự thích câu trả lời này. – Brian

0

Kiểm tra chiều dài của res và chèn một mặc định nếu không có res[1]

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

Thêm kiểm tra xem liệu thứ ere là một giá trị cho tên, để xác thực mục đầu tiên và thêm một kiểm tra trực tuyến trên chiều dài của mảng cho phần còn lại.

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

+1 rất đơn giản – Ulises

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

Bạn chỉ có thể đặt ở đầu :

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

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

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

có ai biết lý do tại sao giá trị chỉ mục đầu tiên đang đến? –

Các vấn đề liên quan