2013-01-15 31 views
5

Mein Gehirn ist jetzt müde und kann keine einfache Lösung dafür finden.C# string split - Index außerhalb der Grenzen

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

Wenn keine | Split, dann wirft es einen Fehler, was wäre eine schnelle und anmutige Möglichkeit, einfach einen Standard "No Name" zu werfen oder es weitergeben. Mir sind nur die Positionen [0] und [1] wichtig.

Beispieldaten

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

brauche ich einen redbull.

+1

Überprüfen Sie die Länge von res und fügen Sie einen Standard ein, wenn es keine res [1] gibt. –

+0

'If (res.Length> 1)' –

+2

var res = (Fehler + "| Kein Name"). Split ('|'); –

Antwort

6

Sie können die ElementAtOrDefault() Extension-Methode aus dem System.Linq Namespace mit dem Null-Koaleszenz-Operator kombiniert (??) für eine elegante Lösung:

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

Wie wäre es Ihnen eine Erweiterungsmethode zu IList<T> hinzufügen:

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

    return list[index]; 
} 

Dann Sie es wie folgt verwenden können:

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

+1 Weitere Zeilen Code, aber robust. Sehr schön. – Ulises

+0

Sie können dasselbe mit der LINQ ElementAtOrDefault() - Standardmethode und dem Nullkoaleszenzoperator tun ... siehe meine Antwort. – luksan

+0

+1 Ich mag diese Antwort wirklich. – Brian

0

Überprüfen Sie die Länge der res und einen Standard einfügen, wenn es keine res[1] ist

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

Geben Sie eine Überprüfung an, ob th Es gibt einen Wert für den Namen, um das erste Element zu validieren und eine Inline-Überprüfung der Länge des Arrays für den Rest hinzuzufügen.

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 sehr einfach – 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

Sie gerade an der Spitze platzieren konnte :

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

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

Zeichenfolge 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

nicht sagen, jemand, warum erster Indexwert comming ist ?? –

Verwandte Themen