2013-01-15 14 views
5

मेरा दिमाग अभी थक गया है और इसके लिए एक सरल समाधान के साथ नहीं आ सकता है।सी # स्ट्रिंग विभाजन - सीमाओं से बाहर सूचकांक

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

यदि कोई नहीं है। विभाजित करें तो यह एक त्रुटि फेंकता है कि एक डिफ़ॉल्ट "नो नाम" में फेंकने या उस पर जाने के लिए एक त्वरित और सुंदर तरीका क्या होगा। मुझे केवल पदों [0] और [1] की परवाह है।

नमूना डेटा

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

मैं एक रेडबुल की जरूरत है।

+1

res की लंबाई की जांच करें और यदि कोई रेज नहीं है तो डिफ़ॉल्ट डालें [1]। –

+0

'यदि (res.Length> 1)' –

+2

var res = (त्रुटि + "| कोई नाम नहीं")। विभाजन ('|'); –

उत्तर

6

आप एक सुरुचिपूर्ण समाधान के लिए अशक्त-कोलेसिंग ऑपरेटर (??) के साथ संयुक्त System.Linq नाम स्थान से ElementAtOrDefault() विस्तार विधि का उपयोग कर सकते हैं :

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

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

कैसे के बारे में आप 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")); 
+0

+1 कोड की अधिक लाइनें लेकिन मजबूत। बहुत अच्छा। – Ulises

+0

आप मानक LINQ ElementAtOrDefault() विधि और नल-कोलेसिंग ऑपरेटर के साथ एक ही काम कर सकते हैं ... मेरा उत्तर देखें। – luksan

+0

+1 मुझे वास्तव में यह जवाब पसंद है। – Brian

0

चेक res की लंबाई और अगर कोई res[1]

है एक डिफ़ॉल्ट सम्मिलित
return String.Format("Name: {0} <br /> Email: {1}", res[0] , res.Length > 1 ? res[1] : "N/A"); 
3

इस पर एक जांच जोड़ें कि क्या ere नाम के लिए एक मान है, पहले आइटम को सत्यापित करने के लिए, और शेष के लिए सरणी की लंबाई पर एक इन-लाइन चेक जोड़ें।

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

+1 बहुत सरल – 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

तुम सिर्फ शीर्ष पर जगह कर सकते हैं:

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

स्ट्रिंग डी = "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

कोई बताता है कि क्यों पहला सूचकांक मूल्य आ रहा है ?? –

संबंधित मुद्दे