我有一个List,其中包含Id,Name,Age等属性。 使用Linq,我可以选择一个或多个属性.Select(x => x.Name,x.Age) 并获得了只有这些属性的Enumeratble。
现在,我需要在方法中选择。我试图使用func但是无法打开方法:
void myMethod<T,TSelection>(List<T> Persons, Func<T, TSelection> index) {
var Index = list.Select(index);
...
}
我现在该如何打开方法?我想是这样的:
myMethod(list,(list, t => t.Age))
答案 0 :(得分:0)
简单地传递lambda作为第二个参数:
myMethod(list, t => t.Age)
运行时会将lambda强制转换为与Func
参数兼容的委托。如果编译器无法确定您的类型,那么您可能必须在lambda上指定类型。如果您使用泛型类型参数作为返回类型,这通常只是一个问题 - 在这种特殊情况下你应该没问题。
如果要在不选择原始类型的新实例的情况下选择多个属性,则应选择新的匿名对象(例如new { }
)。您可以在lambda中选择您关心的属性:
myMethod(list, t => new { t.Age, t.Name });