Por lo tanto, estoy un poco fuera de mi zona de confort cuando trato con Func <>, genéricos y expresiones lambda, pero creo que tengo la idea general (algo así) pero todavía un poco confundido.C# Func <> y genéricos
He implementado la clase SortableObservableCollection (tomado de algún lugar en línea - gracias a quienquiera que fuese Me lo dio!) Y se utiliza como esto:
_lookuplistViewModel.Sort(x => x.BrandName, ListSortDirection.Ascending);
donde x es el tipo de objeto implementado por la colección sortable En este caso, BrandName es una propiedad del tipo de objeto implementado, pero quiero usar el código anterior en una clase genérica y pasar la propiedad en la que desea ordenar. El método Sort se ve así:
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;
}
}
}
la clase genérica en la que se define el método de ordenación que se llama así:
public class ExtendedLookupManagerViewModel<VMod, Mod> : LookupManagerViewModel
where VMod : ExtendedLookupViewModel
where Mod : ExtendedLookupModelBase
y me gustaría crear una instancia de esta manera:
_medProd = new ExtendedLookupManagerViewModel<MedicinalProductViewModel, MedicinalProduct>(string property);
donde property
es la propiedad en el que se ordenan. Idealmente, esto debería ser seguro, pero una cadena será suficiente.
Puede alguien ayudarme a dirigirlo en la dirección correcta, por favor?
estoy bastante bien con lambdas y los genéricos, pero no puedo averiguar qué usted está pidiendo, la primera línea de código que publicó hace lo que está pidiendo a partir de su descripción de los requisitos, pero su sig de constructor parece no tener nada que ver con lo que está hablando. Estoy muy confundido. ¿De qué colección está tratando de ordenar? –
Tiene razón, la primera línea funciona, pero solo si uso un tipo específico derivado de ExtendedLookupManagerViewModel en lugar de usar genéricos. BrandName es una propiedad de MedicinalProductViewModel, pero si utilizo otro tipo, debo poder usar otra propiedad. La pregunta que supongo es cómo puedo usar un parámetro pasado en lugar de x.BrandName.Espero que eso lo aclare un poco? – pilsdumps