Ho diversi elenchi < > che contiene oggetti di classi diverse.
List<classA> listA;
List<classB> listB;
List<classC> listC;
//...
List<classM> listM;
Le classi non sono correlate in alcun modo e non hanno nulla in comune tranne che potrebbero avere una singola proprietà contrassegnata con un attributo SortBy=true
[CustomObjectComparerAttribute(IncludeInCompare = true, Title = "View Order", SortBy=true)]
public int ViewOrder { get; set; }
Quello che mi piacerebbe fare è avere una funzione generica che accetti un elenco di qualsiasi tipo. Questo è il problema n. 1, perché non riesco a capire un modo per far sì che una funzione accetti le liste < > di diversi tipi.
private List<object> SortList(List<object> aList) //<-- this is not allowed (problem 1)
{
//Get which property we sort by...
PropertyInfo prop = GetPropertyToSortBy(objectA);
//Sort the list
//Problem Nr 2: How do I get 'PropertyInfo prop' in the statement below
List<Order> SortedList = aList.OrderBy(o=>o.ThePropToSortBy).ToList();
}
private PropertyInfo GetPropertyToSortBy(object o)
{
Type t = o.GetType();
foreach (PropertyInfo prop in t.GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
if (Attribute.IsDefined(prop, typeof(CustomObjectComparerAttribute)) && ((CustomObjectComparerAttribute)Attribute.GetCustomAttribute(prop, typeof(CustomObjectComparerAttribute))).SortBy == true)
{
return prop;
}
}
return null;
}
Sento che sto attaccando questo problema dall'angolo sbagliato. Sono sulla buona strada? E se sì, come posso risolvere i miei problemi?
se no, puoi indicarmi la direzione giusta?