tôi có một danh sách đặc biệt chứa các mặt hàng loại IThing
:C#: Bắt các giá trị tối đa và tối thiểu tính độc đoán của tất cả các mục trong một danh sách
public class ThingList : IList<IThing>
{...}
public interface IThing
{
Decimal Weight { get; set; }
Decimal Velocity { get; set; }
Decimal Distance { get; set; }
Decimal Age { get; set; }
Decimal AnotherValue { get; set; }
[...even more properties and methods...]
}
Đôi khi tôi cần phải biết tối đa hoặc tối thiểu của một số tài sản của tất cả những điều trong danh sách. Vì "Không yêu cầu", chúng tôi cho phép Danh sách phát hiện ra:
public class ThingList : IList<IThing>
{
public Decimal GetMaximumWeight()
{
Decimal result = 0;
foreach (IThing thing in this) {
result = Math.Max(result, thing.Weight);
}
return result;
}
}
Thats rất đẹp. Nhưng đôi khi tôi cần trọng lượng tối thiểu, đôi khi vận tốc tối đa và vân vân. Tôi không muốn một cặp GetMaximum*()/GetMinimum*()
cho mỗi thuộc tính duy nhất.
Một giải pháp sẽ được phản ánh. Một cái gì đó như (giữ mũi của bạn, mã mạnh mùi!):
Decimal GetMaximum(String propertyName);
Decimal GetMinimum(String propertyName);
Có cách nào tốt hơn, ít mùi để thực hiện điều này?
Cảm ơn, Eric
Edit: @ Matt: Net 2.0
Kết luận: Không có cách nào tốt hơn cho Net 2.0 (với Visual Studio 2005). Có lẽ chúng ta nên chuyển sang .Net 3.5 và Visual Studio 2008 đôi khi sớm. Cảm ơn các bạn.
Kết luận: Có nhiều cách khác nhau tốt hơn nhiều so với phản ánh. Tùy thuộc vào thời gian chạy và phiên bản C#. Có một cái nhìn tại Jon Skeets trả lời cho sự khác biệt. Tất cả các câu trả lời đều rất hữu ích.
Tôi sẽ đi tìm gợi ý Sklivvz (các phương thức ẩn danh). Có một số đoạn mã từ những người khác (Konrad Rudolph, Matt Hamilton và Coincoin) thực hiện ý tưởng Sklivvz. Tôi chỉ có thể "chấp nhận" một câu trả lời, thật không may.
Cảm ơn bạn rất nhiều. tất cả các bạn có thể cảm thấy "chấp nhận", altough chỉ Sklivvz được các khoản tín dụng ;-)
Tôi đã thêm triển khai hoạt động – Sklivvz