2012-05-15 33 views

Trả lời

27

Bạn chắc chắn có thể tạo lớp của riêng mình gọi là List với ba thông số loại chung. Tôi sẽ mạnh mẽ không khuyến khích bạn làm như vậy. Nó sẽ gây nhầm lẫn cho bất kỳ ai sử dụng mã của bạn.

Thay vào đó, một trong hai sử dụng List<Tuple<string, string, string>> (nếu bạn đang sử dụng .NET 4, dù sao) hoặc (tốt) tạo lớp của riêng bạn để đóng gói những ba chuỗi trong một cách có ý nghĩa, sau đó sử dụng List<YourNewClass>.

Tạo lớp học của riêng bạn sẽ làm cho nó rõ ràng hơn khi bạn viết và đọc mã - bằng cách đặt tên cho ba chuỗi khác nhau có liên quan, mọi người sẽ biết ý nghĩa của chúng. Bạn cũng có thể cung cấp nhiều hành vi hơn cho lớp học và khi bạn cần.

+0

cách lấy lại các giá trị từ Danh sách tệp được tạo? – HotTester

+0

@HotTester: ý của bạn là gì khi tìm nạp lại các giá trị? – Arion

+1

@HotTester: Sử dụng các thuộc tính của 'Tuple <,,>' - nhưng nó sẽ dễ đọc hơn nhiều so với việc tạo lớp của riêng bạn. –

2

Bạn có thể sử dụng danh sách tuples. Giống như vậy:

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

Có lẽ một cái gì đó như thế này:

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

Làm thế nào về việc một List<Tuple<string, string, string>>?

Một ý tưởng tốt hơn có thể là mặc dù, nếu mỗi chuỗi có ý nghĩa cụ thể, để đưa tất cả vào một lớp và sau đó tạo danh sách đó.

10

Bạn có thể sử dụng Tuple để đạt được điều đó.

Ví dụ:

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

để lặp qua các giá trị bạn có thể muốn để làm một đơn giản:

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

hoặc tìm một số tupple cụ thể, bạn có thể muốn để làm điều này:

 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 == "--"); 

Thao tác này sẽ trả lại Tuple cuối cùng.

0

Không, thật đáng tiếc điều này không hoạt động. Điều tốt nhất bạn có thể làm là tạo danh sách các danh sách hoặc sử dụng một số dạng triển khai giao diện IDictionary.

Mặc dù, điều đó nói rằng, nếu bạn có ba mục dữ liệu thuộc về nhau theo cách này, có thể đáng giá khi tạo một lớp để chứa chúng.

Điều đó sẽ cho bạn cơ hội để chuyển Danh sách quanh ứng dụng của bạn và gán tên có ý nghĩa cho từng mục dữ liệu. Không bao giờ đánh giá thấp sức mạnh của khả năng đọc sáu tháng xuống dòng.

+0

Thật ra là đầu, giải pháp của @ Tigran không chỉ tốt hơn tôi, nó dạy tôi điều gì đó mà tôi không biết . Đẹp nhất. – inksmithy

0

Bạn có thể xác định Danh sách và triển khai các giao diện cần thiết (chẳng hạn như IList). Mã thổi.

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 
} 

Tuy nhiên, List<Tuple<string,string,string>> được khuyên dùng.

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

Ví dụ:

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

Để biết thêm thông tin, hãy nhìn vào MSDN.

+1

Cảm ơn liên kết rất ... Nga. Điều tốt tôi có thể đọc "Россия (Pусский)". – felickz

+0

Đối với những người không thể đọc tiếng Nga ...;) https://msdn.microsoft.com/library/system.tuple.aspx – GazB

4

Tôi khuyên bạn nên giải pháp này

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

Bất cứ ai cố gắng dynamic?

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

var name = list[0].Name; 
Các vấn đề liên quan