Func<TElement,TKey>
используется для создания IComparer<TKey>
, который используется внутри OrderedEnumerable
для сортировки элементов.Когда вы делаете:
var items = myList.OrderBy(i => i.SomeProperty);
Тип OrderedEnumerable
создает IComparer<TKey>
внутри.В приведенном выше примере, если бы i.SomeProperty
было String
, это создаст экземпляр IComparer<String>
, а затем отсортирует элементы в перечисляемом источнике с помощью этого компаратора на элементе SomeProperty
.последний случай:
list<string> mylist = customers.GetPropertyValues(cus=>cus.Fullname);
Вы делаете это, используя Select
:
var names = customers.Select(c => c.Fullname);
, который будет возвращать перечислимое из String
имен.В методе Select
Func<TSource, TResult>
используется для выбора целевого элемента, который будет добавлен к результату.
Чтобы скопировать это самостоятельно, вы можете сделать:
public static IEnumerable<TMember> GetPropertyValues<TSource, TMember>
(this IEnumerable<TSource> enumerable, Func<TSource, TMember> selector)
{
if (enumerable == null)
throw new ArgumentNullException("enumerable");
foreach (TSource item in enumerable)
{
yield return selector(item);
}
}