2009-08-01 35 views
7

Tôi có mục danh sách sau đâyBắt một mục trong danh sách

public List<Configuration> Configurations 
{ 
    get; 
    set; 
} 

public class Configuration 
    { 
    public string Name 
    { 
     get; 
     set; 
    } 
    public string Value 
     { 
     get; 
     set; 
    } 
} 

Làm thế nào tôi có thể kéo một mục trong cấu hình nơi tên = giá trị?

Ví dụ: cho phép nói rằng tôi có 100 đối tượng cấu hình trong danh sách đó.

Làm cách nào tôi có thể nhận được: Cấu hình.name ["myConfig"]

Điều gì đó tương tự?

UPDATE: Giải pháp cho v2 .net xin

Trả lời

16

Sử dụng phương pháp List<T>.Find trong C# 3.0:

var config = Configurations.Find(item => item.Name == "myConfig"); 

Trong C# 2.0/NET 2.0, bạn có thể sử dụng một cái gì đó giống như (cú pháp sau có thể được giảm nhẹ vì tôi chưa viết các đại biểu theo cách này trong một thời gian dài ...):

Configuration config = Configurations.Find(
    delegate(Configuration item) { return item.Name == "myConfig"; }); 
+0

công việc này trong .net v2 Will? –

+0

Cảm ơn Greg, chính xác những gì tôi muốn biết, là bộ nhớ ok khôn ngoan, để sử dụng một đại biểu? –

+0

@JL - Câu trả lời ban đầu yêu cầu C# 3.0/.NET3.5 nhưng tôi đã thêm một câu lệnh sẽ hoạt động với C# 2.0/.NET2.0 –

0

Hãy thử List(T).Find (C# 3.0):

string value = Configurations.Find(config => config.Name == "myConfig").Value; 
2

Xem xét sử dụng một từ điển, nhưng nếu không:


Bạn câu hỏi là không hoàn toàn rõ ràng với tôi, một trong cả hai nên được câu trả lời của bạn.

sử dụng LINQ:

var selected = Configurations.Where(conf => conf.Name == "Value"); 

hoặc

var selected = Configurations.Where(conf => conf.Name == conf.Value); 

Nếu bạn muốn nó trong một danh sách:

List<Configuration> selected = Configurations 
    .Where(conf => conf.Name == "Value").ToList(); 

hoặc

List<Configuration> selected = Configurations 
    .Where(conf => conf.Name == conf.Value).ToList(); 
5

Có vẻ như những gì bạn thực sự muốn là một từ điển (http://msdn.microsoft.com/en-us/library/xfhwa508.aspx).

Từ điển được thiết kế đặc biệt để ánh xạ cặp khóa-giá trị và sẽ cung cấp cho bạn hiệu suất tốt hơn nhiều để tra cứu hơn Danh sách.

0

Dưới đây là một cách để bạn có thể sử dụng:

static void Main(string[] args) 
     { 
      Configuration c = new Configuration(); 
      Configuration d = new Configuration(); 
      Configuration e = new Configuration(); 

      d.Name = "Test"; 
      e.Name = "Test 23"; 

      c.Configurations = new List<Configuration>(); 

      c.Configurations.Add(d); 
      c.Configurations.Add(e); 

      Configuration t = c.Configurations.Find(g => g.Name == "Test"); 
     } 
+0

Lỗi cú pháp ... – EricSchaefer

Các vấn đề liên quan