[英]Func<T, TResult> access parameter
我正在創建一個擴展方法:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.