Мне нужен метод, который возвращает keySelector, который можно использовать при вызове выражения OrderBy. Проблема в том, что keySelector является универсальным делегатом, и я хотел бы, чтобы метод возвращал keySelectors с различными типами данных на TKey:
Func<TSource,TKey> keySelector
Я хотел бы добиться этого, но вместо использования лямбда-выражений используется методкоторый возвращает keySelector (TKey = string или int):
IEnumerable<Person> orderedByFirstName = persons.OrderBy(p => p.FirstName);
IEnumerable<Person> orderedByAge = persons.OrderBy(p => p.Age);
Возможно ли иметь метод, который каким-то образом возвращает keySelectors с различными типами на TKey? Невозможно вернуть лямбда-выражения, но что-то в этом роде ...
Пока метод возвращает только keySelectors типа data string, все работает нормально:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
public class Behavior
{
public virtual string GetOrderByKeySelector(Person p)
{
return p.FirstName;
}
}
public class SpecializedBehavior : Behavior
{
public override string GetOrderByKeySelector(Person p)
{
return p.LastName;
}
}
List<Person> persons = new List<Person>
{
new Person{Age=10, FirstName="Pelle", LastName="Larsson"},
new Person{Age=90, FirstName="Nils", LastName="Nilsson"},
new Person{Age=15, FirstName="Olle", LastName="Johansson"},
new Person{Age=30, FirstName="Kalle", LastName="Svensson"}
};
Используется какэто:
SpecializedBehavior behavior = new SpecializedBehavior();
IEnumerable<Person> orderedResult = persons.OrderBy(behavior.GetOrderByKeySelector);