2012-06-15 10 views
6

Tôi đang cố gắng tìm hiểu cách sử dụng danh sách trong C#. Có rất nhiều hướng dẫn trên mạng, nhưng không có hướng dẫn nào thực sự giải thích cách xem danh sách chứa bản ghi.Cách xem các giá trị được lưu trong danh sách?

Đây là mã của tôi:

class ObjectProperties 
{ 
    public string ObjectNumber { get; set; } 
    public string ObjectComments { get; set; } 
    public string ObjectAddress { get; set; } 
} 

List<ObjectProperties> Properties = new List<ObjectProperties>(); 
ObjectProperties record = new ObjectProperties 
    { 
     ObjectNumber = txtObjectNumber.Text, 
     ObjectComments = txtComments.Text, 
     ObjectAddress = addressCombined, 
    }; 
Properties.Add(record); 

Tôi muốn hiển thị các giá trị trong một bảng thông báo. Ngay bây giờ tôi chỉ đảm bảo thông tin đang đi vào danh sách. Tôi cũng muốn tìm hiểu cách tìm giá trị trong danh sách và nhận các thông tin khác có liên quan đến nó, chẳng hạn như, tôi muốn tìm mục theo Số đối tượng và nếu nó nằm trong danh sách thì nó sẽ trả về địa chỉ . Tôi cũng đang sử dụng WPF, nếu điều đó tạo nên sự khác biệt. Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn bạn.

+4

bạn có thể sử dụng một truy vấn LINQ, kiểm tra [này] (http://stackoverflow.com/a/1175662/647884). – Bastardo

+0

nếu ObjectNumber là duy nhất, sau đó bạn có thể muốn làm cho rằng một từ điển (thay vì danh sách) với 'TKey' là loại chuỗi để giữ số đối tượng. – Matthew

+0

Tôi đã sử dụng từ điển, nhưng người dùng sẽ phải cập nhật Số đối tượng khi "sản phẩm" được thay thế hoặc thay đổi. – JLott

Trả lời

5

Cách tốt nhất là để ghi đè ToString trong lớp học của bạn và sử dụng string.Join tham gia tất cả hồ sơ của bạn:

var recordsAsString = string.Join(Environment.NewLine, 
      Properties.Select(p => p.ToString())); 
MessagBox.Show(recordsAsString); 

Dưới đây là triển khai có thể có của ToString:

class ObjectProperties 
{ 
    public string ObjectNumber { get; set; } 
    public string ObjectComments { get; set; } 
    public string ObjectAddress { get; set; } 

    public override string ToString() 
    { 
     return "ObjectNumber: " 
       + ObjectNumber 
       + " ObjectComments: " 
       + ObjectComments 
       + " ObjectAddress: " 
       + ObjectAddress; 
    } 
} 

Tôi cũng muốn tìm hiểu cách tìm giá trị trong danh sách và nhận thông tin khác có liên quan đến nó, chẳng hạn như, tôi muốn tìm mục theo Số đối tượng và nếu nó nằm trong danh sách thì nó sẽ trả lại địa chỉ.

Có một số cách để tìm kiếm một List<T>, đây là hai:

String numberToFind = "1234"; 
String addressToFind = null; 
// using List<T>.Find method 
ObjectProperties obj = Properties.Find(p => p.ObjectNumber == numberToFind); 
//using Enumerable.FirstOrDefault method (add using System.Linq) 
obj = Properties.FirstOrDefault(p => p.ObjectNumber == numberToFind); 
if (obj != null) 
    addressToFind = obj.ObjectAddress; 
+0

Điều này làm việc hoàn hảo! Cảm ơn bạn rất nhiều. – JLott

+0

@JLott: Đã chỉnh sửa câu trả lời của tôi để hiển thị cách tìm kiếm danh sách. –

+0

Tuyệt vời như thế nào chỉ là một vài dòng có thể dạy cho một người rất nhiều. Cảm ơn bạn đã cập nhật câu trả lời của bạn, nó rất hữu ích! – JLott

1

Khi bạn có danh sách, bạn có thể lặp qua nó bằng cách sử dụng vòng lặp foreach và xuất các giá trị theo cách đó.

Bạn cũng có thể sử dụng LINQ để truy vấn danh sách của mình và trả lại giá trị bạn muốn.

Ví dụ:

properties.Where(x=>x.ObjectNumber == 10).FirstOrDefault() 

này sẽ trả lại hồ sơ đầu tiên nơi ObjectNumber là 10

Hãy cho tôi biết nếu bạn cần làm rõ hơn.

2

Để hiển thị các mục trong danh sách, bạn có thể lặp qua danh sách và lấy thông tin ra khỏi danh sách.

StringBuilder sb = new StringBuilder(); 

foreach (ObjectProperties op in Properties) 
{ 
    sb.Append(op.ObjectNumber + "\n"); 
} 

sb.ToString(); // show this in messagebox 
2

Phụ thuộc vào những gì bạn muốn làm.

Nếu bạn muốn để cố gắng tìm một số dữ liệu, sử dụng mã này:

List<ObjectProperties> Properties = new List<ObjectProperties>(); 
var result = Properties.Where(n => n.ObjectNumber.Equals('yourVariableHere')); 
+0

Tuyệt vời. Tôi nghĩ rằng đây là những gì tôi sẽ cố gắng để tìm kiếm các giá trị. Có thể bạn có thể giải thích làm thế nào tôi có thể nhận được chỉ là tài sản ObjectAddress từ này. Cảm ơn sự giúp đỡ của bạn. – JLott

+0

Giả sử ObjectNumber của bạn là ID duy nhất bạn có thể thực hiện một số việc như sau: var objAddress = from p in Properties chọn p.ProductName nơi p.ObjectNumber.Equals ('YourVariable'); –

+0

Nếu bạn cần một bảng gian lận tốt = http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

2

List<T> lớp thực hiện IEnumerable<T>, cho phép bạn sử dụng một bó toàn bộ các phương pháp rất hữu ích cho các truy vấn danh sách.

Tôi khuyên bạn nên xem tài liệu MSDN List<T>IEnumerable<T>. Đi qua các phương pháp có sẵn và xem các ví dụ. Nếu bạn có bất kỳ câu hỏi cụ thể nào, hãy quay lại SO.

Đây là cách bạn có thể thực hiện những gì bạn hỏi làm ví dụ:

string address = myList 
       .Where(x=>x.ObjectNumber=="A123") 
       .Select(x=>x.ObjectAddress) 
       .First();