2013-01-15 17 views
5

Mój mózg jest teraz zmęczony i nie może zaproponować prostego rozwiązania.C# string split - indeks poza granicami

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

Jeśli nie ma | Podziel się, a następnie zgłasza błąd, co byłoby szybkim i pełnym wdzięku sposobem na dodanie domyślnego "Bez nazwy" lub przekazanie go. Dbam tylko o pozycje [0] i [1].

Przykładowe dane

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

muszę Redbull.

+1

Sprawdź długość res i wstaw wartość domyślną, jeśli nie ma res [1]. –

+0

'Jeśli (res.Length> 1)' –

+2

var res = (błąd + "| Brak nazwy"). Split ('|'); –

Odpowiedz

6

Można użyć metody ElementAtOrDefault() przedłużacz z System.Linq nazw w połączeniu z operatorem null koalescencyjnego (??) na eleganckie rozwiązanie:

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

Jak Pan dodać metodę rozszerzenia do 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]; 
} 

Następnie można go używać tak:

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

+1 Więcej linii kodu, ale solidne. Bardzo dobrze. – Ulises

+0

Możesz zrobić to samo ze standardową metodą LINQ ElementAtOrDefault() i operatorem koalescencyjnym ... zobacz moją odpowiedź. – luksan

+0

+1 Bardzo podoba mi się ta odpowiedź. – Brian

0

Sprawdź długość res i wstawić domyślne jeśli nie ma res[1]

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

Dodaj sprawdzenie, czy ere jest wartością dla nazwy, dla sprawdzenia poprawności pierwszego elementu i dodania sprawdzenia w linii na długości tablicy dla reszty.

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 bardzo prosty – 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

Można po prostu umieścić na szczycie :

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

czy ktoś mówi, dlaczego pierwsza wartość indeksu nadchodzi? –

Powiązane problemy