簡體   English   中英

Func <T,TResult>訪問參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM