2012-05-15 22 views
8

क्या हम सी # .NET में अपना List<string, string, string> बना सकते हैं? मुझे सूची में एक तत्व के रूप में 3 अलग-अलग तारों की एक सूची बनाने की आवश्यकता है।अपनी खुद की सूची बनाएं <स्ट्रिंग, स्ट्रिंग, स्ट्रिंग>

उत्तर

27

आप निश्चित रूप अपनी खुद की कक्षा तीन जेनेरिक प्रकार पैरामीटर साथ List नामक बना सकता है। मैं दृढ़ता से आपको ऐसा करने से हतोत्साहित करता हूं। यह आपके कोड का उपयोग कर किसी के भी बिल्ली को भ्रमित कर देगा।

इसके बजाय, या तो उपयोग List<Tuple<string, string, string>> (आप .NET 4 का उपयोग कर रहे, वैसे भी है) या (अधिमानतः), एक सार्थक तरीके से उन तीन तार संपुटित करने के लिए अपने ही वर्ग बनाने तो List<YourNewClass> का उपयोग करें।

अपनी खुद की कक्षा बनाना, जब आप लिख रहे हैं और कोड पढ़ रहे हैं तो यह बहुत स्पष्ट हो जाएगा - इसमें शामिल तीन अलग-अलग तारों को नाम देकर, सभी को पता चलेगा कि उनका क्या अर्थ है। जब आप की आवश्यकता होती है तब आप वर्ग को और अधिक व्यवहार भी दे सकते हैं।

+0

कैसे टुपल की सूची से मूल्यों को वापस लाया जाए? – HotTester

+0

@ होटटेस्टर: मूल्यों को वापस लाकर आपका क्या मतलब है? – Arion

+1

@ होटटेस्टर: 'ट्यूपल <,,> 'के गुणों का उपयोग करें - लेकिन यह आपकी खुद की कक्षा बनाने से बहुत कम पठनीय होगा। –

2

आप tuples की एक सूची का उपयोग कर सकते हैं। इसलिए जैसा:

List<Tuple<string, string, string>> 
3

हो सकता है कि कुछ इस तरह:

var ls= new List<Tuple<string,string,string>>(); 
1

कैसे एक List<Tuple<string, string, string>> बनाने के बारे में?

हालांकि एक बेहतर विचार हो सकता है, यदि प्रत्येक स्ट्रिंग का एक विशिष्ट अर्थ है, तो उन्हें सभी को कक्षा में रखने के लिए और उसके बाद एक सूची बनाएं।

10

आप इसे प्राप्त करने के लिए Tuple का उपयोग कर सकते हैं।

उदाहरण के लिए:

var list = new List<Tuple<string,string,string>>(); 

मूल्यों पर पुनरावृति करने के लिए आप चाहते हो सकता है एक सरल करने के लिए:

list.ForEach(x=>{ 
    //x is a Tuple 
    }); 

या को लगता है कुछ विशिष्ट tupple, आप चाहते हो सकता है फोल्डिंग करने के लिए:

 var list = new List<Tuple<string,string,string>>{ 
     new Tuple<string,string,string>("Hello", "Holla", "Ciao"), 
     new Tuple<string,string,string>("Buy", "--", "Ciao") 
    }; 

    list.Where(x=>x.Item2 == "--"); 

यह अंतिम ट्यूपल लौटाएगा।

0

नहीं, दुख की बात यह काम नहीं करती है। सबसे अच्छा आप सूची सूची बनाने के लिए कर सकते हैं, या IDictionary इंटरफेस के कार्यान्वयन के कुछ रूप का उपयोग करना है।

हालांकि, यदि आपके पास डेटा के तीन आइटम हैं जो इस तरीके से एक साथ हैं, तो संभवत: उन्हें रखने के लिए कक्षा बनाना संभव है।

इससे आपको अपने आवेदन के चारों ओर एक सूची पास करने और प्रत्येक डेटा आइटम के सार्थक नाम असाइन करने का मौका मिलेगा। लाइन के नीचे छह महीने पठनीयता की शक्ति को कभी कम मत समझें।

+0

असल में खरोंच, कि @ टिग्रेन का समाधान न केवल मेरे से बेहतर है, यह मुझे कुछ सिखाता है जिसे मैं नहीं जानता था । अच्छा एक। – inksmithy

0

आप एक सूची परिभाषित कर सकते हैं और आवश्यक इंटरफेस (जैसे IList) को कार्यान्वित कर सकते हैं। कोड झटका

public class List<T1, T2, T3> : IList 
{ 

    #region IList Members 

    public int Add(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public void Clear() 
    { 
     throw new NotImplementedException(); 
    } 

    public bool Contains(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public int IndexOf(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public void Insert(int index, object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public bool IsFixedSize 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public bool IsReadOnly 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public void Remove(object value) 
    { 
     throw new NotImplementedException(); 
    } 

    public void RemoveAt(int index) 
    { 
     throw new NotImplementedException(); 
    } 

    public object this[int index] 
    { 
     get 
     { 
      throw new NotImplementedException(); 
     } 
     set 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    #endregion 

    #region ICollection Members 

    public void CopyTo(Array array, int index) 
    { 
     throw new NotImplementedException(); 
    } 

    public int Count 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public bool IsSynchronized 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public object SyncRoot 
    { 
     get { throw new NotImplementedException(); } 
    } 

    #endregion 

    #region IEnumerable Members 

    public IEnumerator GetEnumerator() 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

हालांकि, List<Tuple<string,string,string>> अनुशंसित है।

0
public class Listt< T, T1, T2> 
    { 
     public Listt() 
     { 

     } 
     public void Add(T item, T1 item1, T2 item3) 
     { 

     } 
    } 


public partial class MyApp : Window 
{ 

public MyApp() 

{ 

    InitializeComponent(); 

    Listt<string, string, string> customList = new Listt<string, string, string>(); 
    customList.Add("we","are","here"); 

    } 
} 
2

उदाहरण के लिए:

var list = new List<Tuple<string, string, string>>(); 
var tuple = Tuple.Create("a", "b", "c"); 
list.Add(tuple); 

अधिक जानकारी के लिए MSDN में लग रहे हो।

+1

धन्यवाद लिंक बहुत है ... रूसी। अच्छी बात मैं पढ़ सकता हूं "Россия (Pусский)"। – felickz

+0

उन लोगों के लिए जो रूसी नहीं पढ़ सकते ...;) https://msdn.microsoft.com/library/system.tuple.aspx – GazB

4

मैं इस समाधान

public class MyCustomClass 
    { 
     public string MyString1 { get; set; } 
     public string MyString2 { get; set; } 
     public string MyString3 { get; set; } 
    } 

    class MyApp 
    { 
     public MyApp() 
     { 
      List<MyCustomClass> customList = new List<MyCustomClass>(); 
      customList.Add(new MyCustomClass 
      { 
       MyString1 = "Hello", 
       MyString2 = "Every", 
       MyString3 = "Body", 
      }); 
     } 
    } 
0

किसी को भी करने की कोशिश की dynamic की सलाह देते हैं?

var list = new List<dynamic>(); 
list.Add(new { Name = "SampleN", Address = "SampleA", Email = "SampleE" }); 

var name = list[0].Name; 
संबंधित मुद्दे