Ниже показано, как далеко я это сделал. Мне нужно отправить Expression<Func<T, string>>
в качестве параметра вместо Func<T,string>
в функцию Get, и у меня все еще есть Select (). Это легко возможно? Форматируется для LinqPad .
void Main()
{
// Setup sample data in wholelist
var wholelist = new List<Example>();
for (var a = 0; a < 10; a++)
{ var t = new Example { id = a.ToString(), name = a.ToString() };
wholelist.Add(t);
}
// Do the real work
var names = Get<Example>( wholelist, p => p.name );
// LinqPad shows content
names.Dump();
}
public class Example
{
public string id {get;set;}
public string name {get;set;}
}
public static List<string>
Get<T>(IEnumerable<T> source, Func<T, string> selector)
{
var list = source.Select<T,string>(selector).ToList();
return list;
}
Причина в том, что у нас уже есть множество функций, вызывающих эту функцию с помощью Expression<Func<T,string>>
.