参数索引器的实际使用
Practical usage of params indexer
最近,我发现索引器可以接受参数数组 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的实际用法是什么?
在发布问题并查看代码和文档后一分钟内找到了答案 - C# 允许您使用任何类型作为索引器的参数,但 params
不是特例。
根据MSDN,
Indexers do not have to be indexed by an integer value; it is up to you how to define the specific look-up mechanism.
换句话说,索引器可以是任何类型。它可以是一个数组...
public IEnumerable<TValue> this[TKey[] keys]
{
get { return keys.Select(key => Dict[key]); }
}
var res = sd[new [] {"a", "b"}];
或任何其他不寻常的类型或集合,包括 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
indexer的实际用法是什么?
在发布问题并查看代码和文档后一分钟内找到了答案 - C# 允许您使用任何类型作为索引器的参数,但 params
不是特例。
根据MSDN,
Indexers do not have to be indexed by an integer value; it is up to you how to define the specific look-up mechanism.
换句话说,索引器可以是任何类型。它可以是一个数组...
public IEnumerable<TValue> this[TKey[] keys]
{
get { return keys.Select(key => Dict[key]); }
}
var res = sd[new [] {"a", "b"}];
或任何其他不寻常的类型或集合,包括 params
数组,如果它看起来方便且适合您的情况。