【发布时间】:2015-12-08 09:04:29
【问题描述】:
最近,我发现索引器可以接受一组参数为params:
public class SuperDictionary<TKey, TValue>
{
public Dictionary<TKey, TValue> Dict { get; } = new Dictionary<TKey, TValue>();
public IEnumerable<TValue> this[params TKey[] keys]
{
get { return keys.Select(key => Dict[key]); }
}
}
那么,你就可以做到:
var sd = new SuperDictionary<string, object>();
/* Add values */
var res = sd["a", "b"];
但是,我从未在 .NET Framework 或任何第三方库中遇到过这种用法。为什么已经实施了?能够引入params indexer有什么实际用途?
【问题讨论】:
-
我不得不承认:这是
params关键字的一个非常时髦的用例。 -
索引器只是应用于普通方法的语法糖(强制它具有至少一个参数)。由于普通方法采用 formal-parameter-list(在 C# 语言规范的第 10.6.1 节中定义)并且 formal-parameter-list 可能包含 parameter-array,这意味着您可以将
params与索引器一起使用。
标签: c# parameter-passing variadic indexer params-keyword