Vì vậy, tôi là một chút ra khỏi vùng thoải mái của tôi khi giao dịch với Func <>, Generics và lambda biểu thức nhưng tôi nghĩ rằng tôi nhận được ý tưởng chung (loại) nhưng vẫn còn một chút nhầm lẫn.C# Func <> và generics
Tôi đã thực hiện lớp SortableObservableCollection (lấy từ trên mạng ở đâu đó - nhờ ai đó là tôi đã nhận nó từ!) Và nó được sử dụng như thế này:
_lookuplistViewModel.Sort(x => x.BrandName, ListSortDirection.Ascending);
trong đó x là các loại đối tượng thực hiện bởi bộ sưu tập có thể sắp xếp. Trong trường hợp này, BrandName là thuộc tính của kiểu đối tượng được triển khai thực hiện, nhưng tôi muốn sử dụng mã ở trên trong một lớp chung và chuyển vào thuộc tính để sắp xếp. Sort phương pháp trông như thế này:
public void Sort<TKey>(Func<T, TKey> keySelector, ListSortDirection direction)
{
switch (direction)
{
case ListSortDirection.Ascending:
{
ApplySort(Items.OrderBy(keySelector));
break;
}
case System.ComponentModel.ListSortDirection.Descending:
{
ApplySort(Items.OrderByDescending(keySelector));
break;
}
}
}
Lớp generic mà trên đó các Sắp xếp phương pháp được gọi là được định nghĩa như thế này:
public class ExtendedLookupManagerViewModel<VMod, Mod> : LookupManagerViewModel
where VMod : ExtendedLookupViewModel
where Mod : ExtendedLookupModelBase
và tôi muốn tạo một thể hiện của nó như thế này:
_medProd = new ExtendedLookupManagerViewModel<MedicinalProductViewModel, MedicinalProduct>(string property);
trong đó property
là thuộc tính cần sắp xếp. Lý tưởng nhất này nên được loại an toàn, nhưng một chuỗi sẽ đủ.
Có ai có thể giúp hướng dẫn tôi đi đúng hướng không?
tôi khá ổn với lambdas và Generics, nhưng tôi không thể tìm ra những gì bạn đang yêu cầu, dòng đầu tiên của mã bạn đăng tải là những gì bạn đang yêu cầu từ mô tả yêu cầu của bạn, nhưng sig constructor của bạn dường như không liên quan gì đến những gì bạn đang nói đến. Tôi rất bối rối. Bộ sưu tập của bạn mà bạn đang cố gắng sắp xếp là gì? –
Bạn hoàn toàn đúng, dòng đầu tiên không hoạt động nhưng chỉ khi tôi sử dụng một loại cụ thể có nguồn gốc từ ExtendedLookupManagerViewModel thay vì sử dụng Generics. BrandName là một tài sản trên MedicinalProductViewModel, nhưng nếu tôi sử dụng một loại khác tôi cần để có thể sử dụng tài sản khác. Câu hỏi tôi đoán là làm thế nào tôi có thể sử dụng một tham số được thông qua thay vì x.BrandName.Hy vọng rằng làm cho nó một chút rõ ràng hơn? – pilsdumps