params索引器的实际用法

时间:2015-12-08 09:04:29

标签: c# parameter-passing variadic indexer params-keyword

最近,我发现索引器可以接受一个参数数组onchange

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]); }
    }
}

但是,我从未在.NET Framework或任何第三方库中遇到过这种用法。为什么要实施?能够引入var sd = new SuperDictionary<string, object>(); /* Add values */ var res = sd["a", "b"]; 索引器的实际用法是什么?

1 个答案:

答案 0 :(得分:1)

在发布问题并查看代码和文档后的一分钟内找到答案 - C#允许您使用任何类型作为索引器的参数,但不是params作为特殊情况。

根据MSDN

  

索引器不必用整数值编制索引;由您决定如何定义特定的查找机制。

换句话说,索引器可以是任何类型。它可以是一个数组......

public IEnumerable<TValue> this[TKey[] keys]
{
    get { return keys.Select(key => Dict[key]); }
}

var res = sd[new [] {"a", "b"}];

或任何其他不寻常的类型或集合,包括params数组,如果它在您的情况下似乎方便和适用。