Tôi đang tìm một phương thức để chuyển thuộc tính cho một hàm. Không phải giá trị của tài sản. Hàm không biết trước thuộc tính nào sẽ được sử dụng để sắp xếp. Cách đơn giản nhất trong ví dụ này là: tạo 4 ghi đè với các kiểu tham số khác nhau. Cách khác là sử dụng chức năng bên trong typeof()
. Cả hai cách này đều không thể chấp nhận được khi Class1 có hàng trăm thuộc tính. Cho đến nay tôi đã tìm thấy phương pháp sau:Vượt qua thuộc tính để hoạt động như tham số trong C#
class Class1
{
string vehName;
int maxSpeed;
int fuelCapacity;
bool isFlying;
}
class Processor
{
List<Class1> vehicles = null;
Processor(List<Class1> input)
{
vehicles = input;
}
List<Class1> sortBy(List<Class1> toSort, string propName)
{
if (toSort != null && toSort.Count > 0)
{
return toSort.OrderBy(x => typeof(Class1).GetProperty(propName).GetValue(x, null)).ToList();
}
else return null;
}
}
class OuterUser
{
List<Class1> vehicles = new List<Class1>();
// ... fill the list
Processor pr = new Processor(vehicles);
List<Class1> sorted = pr.sortBy("maxSpeed");
}
Tôi không thích phương pháp này vì có nguy cơ "lỗi của con người" khi chuyển chuỗi tới hàm xử lý. Khi chuỗi được tạo ra bởi một phần khác của mã này sẽ thậm chí còn xấu xí hơn. Xin vui lòng, đề xuất cách thanh lịch hơn để thực hiện việc chuyển thuộc tính Class1 để hoạt động để xử lý thêm. Tùy chọn tốt nhất để sử dụng IMHO sẽ là (hoặc một cái gì đó như thế này):
vehicles = sortBy(vehicles, Class1.maxSpeed);
Phiên bản .NET? – alf
Tài sản được sử dụng để sắp xếp được chọn ở địa điểm đầu tiên như thế nào? – arootbeer
Phiên bản .NET 4.0 –