Więc, jestem trochę poza moją strefą komfortu, kiedy mam do czynienia z Func <>, Generics i wyrażeniami lambda, ale myślę, że dostaję ogólny pomysł (rodzaj), ale wciąż trochę zdezorientowany.C# Func <> i generics
I zostały wdrożone klasę SortableObservableCollection (wzięte z gdzieś w Internecie - dzięki temu, kto to był Dostałem go od!) I jest on stosowany tak:
_lookuplistViewModel.Sort(x => x.BrandName, ListSortDirection.Ascending);
gdzie x jest typ obiektu realizowane przez sortowalna kolekcja. W tym przypadku BrandName jest właściwością typu obiektu zaimplementowanego, ale chcę użyć powyższego kodu w klasie ogólnej i przekazać właściwość do sortowania. Sortuj metoda wygląda następująco:
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;
}
}
}
Klasa rodzajowe, w którym metoda sortowania jest nazywane jest zdefiniowany następująco:
public class ExtendedLookupManagerViewModel<VMod, Mod> : LookupManagerViewModel
where VMod : ExtendedLookupViewModel
where Mod : ExtendedLookupModelBase
i chciałabym utworzyć instancję o tym tak:
_medProd = new ExtendedLookupManagerViewModel<MedicinalProductViewModel, MedicinalProduct>(string property);
gdzie property
jest właściwością do posortowania. Najlepiej byłoby, gdyby był bezpieczny, ale wystarczy napis.
Czy ktoś może pomóc w skierowaniu mnie we właściwym kierunku, proszę?
jestem całkiem w porządku z lambdas i rodzajowych, ale nie mogę dowiedzieć się, co o co prosisz, pierwsza linia opublikowanego kodu robi to, o co prosisz, z opisu wymagań, ale twój konstruktor sig nie ma nic wspólnego z tym, o czym mówisz. Jestem zdezorientowany. Jaka jest Twoja kolekcja tego, co próbujesz sortować? –
Masz całkowitą rację, pierwsza linia działa, ale tylko wtedy, gdy korzystam z określonego typu pochodzącego z narzędzia ExtendedLookupManagerViewModel, zamiast używać generycznych. BrandName jest właściwością produktu MedicinalProductViewModel, ale jeśli używam innego typu, muszę mieć możliwość korzystania z innej właściwości. Pytanie, jak sądzę, w jaki sposób mogę użyć przekazanego parametru zamiast x.BrandName.Mam nadzieję, że czyni to nieco jaśniejszym? – pilsdumps