params索引器的实际使用



最近,我发现索引器可以接受一组参数作为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索引器的实际用途是什么?

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

根据MSDN,

索引器不必通过整数值进行索引;如何定义特定的查找机制取决于您。

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

public IEnumerable<TValue> this[TKey[] keys]
{
    get { return keys.Select(key => Dict[key]); }
}
var res = sd[new [] {"a", "b"}];

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

相关内容

  • 没有找到相关文章

最新更新