В последнее время я обнаружил, что индексатор может принять массив аргументов в 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
?
Должен признать: это довольно забавный случай использования ключевого слова 'params'. –
Индексатор - это просто синтаксический сахар, применяемый к нормальному методу (с принудительным исполнением, что он имеет хотя бы один параметр). Поскольку нормальный метод принимает * формальный параметр-список * (определенный в разделе 10.6.1 спецификации языка C#), а * format-parameter-list * может содержать * parameter-array *, это означает, что вы можете использовать ' params' с индексом. –