2010-08-12 36 views

Trả lời

22

Được rồi, vì vậy nếu bạn không có LINQ, bạn có thể mã hóa cứng nó:

public int FindMaxAge(List<MyType> list) 
{ 
    if (list.Count == 0) 
    { 
     throw new InvalidOperationException("Empty list"); 
    } 
    int maxAge = int.MinValue; 
    foreach (MyType type in list) 
    { 
     if (type.Age > maxAge) 
     { 
      maxAge = type.Age; 
     } 
    } 
    return maxAge; 
} 

Hoặc bạn có thể viết một phiên bản tổng quát hơn, tái sử dụng trên nhiều loại danh sách:

public int FindMaxValue<T>(List<T> list, Converter<T, int> projection) 
{ 
    if (list.Count == 0) 
    { 
     throw new InvalidOperationException("Empty list"); 
    } 
    int maxValue = int.MinValue; 
    foreach (T item in list) 
    { 
     int value = projection(item); 
     if (value > maxValue) 
     { 
      maxValue = value; 
     } 
    } 
    return maxValue; 
} 

Bạn có thể sử dụng này với:

// C# 2 
int maxAge = FindMax(list, delegate(MyType x) { return x.Age; }); 

// C# 3 
int maxAge = FindMax(list, x => x.Age); 

Hoặc bạn có thể sử dụng LINQBridge :)

Trong mỗi trường hợp, bạn có thể trả lại khối nếu có một cuộc gọi đơn giản đến Math.Max nếu bạn muốn. Ví dụ:

foreach (T item in list) 
{ 
    maxValue = Math.Max(maxValue, projection(item)); 
} 
+0

Loại đại biểu bạn có thể vui lòng cho ví dụ – Shrivallabh

+0

@Shrivallabh: Tôi không biết ý bạn là gì, tôi sợ. –

+0

@ JonSkeet, tôi nghĩ rằng anh ấy cần một số công cụ xây dựng cho ví dụ 'delegate'. Tôi cũng không thể hiểu được điều đó, đó là lý do tại sao tôi phải đi với phương pháp thứ 2 mà bạn đã sử dụng trong cùng một khối. Điều FindMax. –

61

Giả sử bạn có quyền truy cập vào LINQ, và Age là một int (bạn cũng có thể thử var maxAge - đó là nhiều khả năng biên dịch):

int maxAge = myTypes.Max(t => t.Age); 

Nếu bạn cũng cần RandomID (hoặc toàn bộ đối tượng) , một giải pháp nhanh chóng là sử dụng MaxBy từ MoreLinq

MyType oldest = myTypes.MaxBy(t => t.Age); 
+0

Không, không có quyền truy cập LINQ .... – Waheed

+0

@Waheed - sau đó bạn nên thêm nó vào câu hỏi của mình. Bạn đang sử dụng phiên bản nào - 2.0 hoặc 3.0? – Kobi

+0

Xin lỗi vì điều đó. Tôi đang sử dụng 2,0 – Waheed

0

Làm thế nào về cách này:

List<int> myList = new List<int>(){1, 2, 3, 4}; //or any other type 
myList.Sort(); 
int greatestValue = myList[ myList.Count - 1 ]; 

Bạn về cơ bản cho phép các Sort() phương pháp để làm công việc cho bạn thay vì viết phương pháp riêng của mình. Trừ khi bạn không muốn sắp xếp bộ sưu tập của mình.

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