函数<T, 搜索> 访问参数



我正在创建一个扩展方法:

public static IEnumerable<T> GroupAndSortBy<T>(this IEnumerable<T> source)

我想从任何集合中调用此方法:

myCollection.GroupAndSortBy(x => x.MyParam)

其中 MyParam 必须是一个字符串,因为我想在字母分组方法中使用它。

这样做,我应该将方法签名更改为:

public static IEnumerable<T> GroupAndSortBy<T>(this IEnumerable<T> source, Func<T, string> key)

问题是现在我无法访问我作为参数传递的实际字符串,但我想做这样的事情:

source.GroupBy(key.ToLower().FirstOrDefault());

你可以帮我吗?

由于key是一个委托,你应该调用它,就像这样:

source.GroupBy(t => key(t).ToLower().FirstOrDefault());

这告诉 LINQ,为了从类型为 T 的源值t获取组键,需要调用 key(t) ,将其转换为小写,并获取第一个字母(如果有)。

备注:如果您只需要第一个字母,则不需要将整个密钥转换为小写:

source.GroupBy(t => char.ToLower(key(t).FirstOrDefault()));

你可以做这样的事情:

var query = source.GroupBy(x => key(x).ToLower());

我不清楚你为什么需要FirstOrDefault.是否只想使用第一个字符?

你的key是一个返回字符串的函数(委托),所以你必须调用它才能从中获取字符串返回值:

source.GroupBy(key().ToLower().FirstOrDefault());

最新更新