Linq 将索引器作为 IEnumerable.Select 选择器传递
Linq pass an Indexer as IEnumerable.Select selector
是否有允许将索引器作为 Select(Func<T,TResult> selector)
选择器传递的语法?例如,是否有 shorthand(即没有 'arrow')用于以下使用索引器的代码:
// full version using indexer
collection.Select(key => dictionary[key]);
和其他成员函数一样吗?例如:
// full
collection.Select(key => dictionary.ContainsKey(key));
// shorthand
collection.Select(dictionary.ContainsKey);
none 以下似乎有效:
// shorthand attempts with invalid syntax
collection.Select(dictionary.[]);
collection.Select(dictionary[]);
索引器毕竟只是方法...
无法直接为索引器编写 "method group",但您可以在 Dictionary<TKey, TValue>
上编写扩展方法并使用该方法组:
public static TValue Get<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key) => dict[key];
现在您可以在 lambda 中使用 someDict.Get
。
是否有允许将索引器作为 Select(Func<T,TResult> selector)
选择器传递的语法?例如,是否有 shorthand(即没有 'arrow')用于以下使用索引器的代码:
// full version using indexer
collection.Select(key => dictionary[key]);
和其他成员函数一样吗?例如:
// full
collection.Select(key => dictionary.ContainsKey(key));
// shorthand
collection.Select(dictionary.ContainsKey);
none 以下似乎有效:
// shorthand attempts with invalid syntax
collection.Select(dictionary.[]);
collection.Select(dictionary[]);
索引器毕竟只是方法...
无法直接为索引器编写 "method group",但您可以在 Dictionary<TKey, TValue>
上编写扩展方法并使用该方法组:
public static TValue Get<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key) => dict[key];
现在您可以在 lambda 中使用 someDict.Get
。