Ответ Тваноффсона предполагает, что было бы трудно сделать «параметры» контекстными.На самом деле это не так сложно.Рассмотрим:
void M(params x)
То, что мы бы сделали в этом случае, гипотетически, это первая попытка найти тип 'params'.Если бы мы могли найти один, отлично, мы сделали.Если мы не могли, тогда у нас есть небольшая проблема.предположим, например, вместо х это было
void M(params Int32)
Ясно, что это ошибка, но какая ошибка?Должны ли мы предполагать, что Int32 - это имя параметра и выдавать ошибку «вы пропустили тип»?Должны ли мы предполагать, что Int32 является типом, и выдавать ошибку, говорящую о том, что тип должен быть типом массива, и что вы пропускаете идентификатор?Должны ли мы дать ошибку, говоря, что нет типа с именем «params»?Что правильно делать здесь?Ясно, что мы можем что-то выяснить, но это не очевидно.
Это случаи ошибок, которые хитры с контекстными ключевыми словами;заставить работать успешные примеры на самом деле довольно просто.
Но на самом деле, не так уж и сложно сделать контекстуальный сложным , а сделать его контекстным - не очень большая победа.Создание контекстов "set" и "value" было большой победой, потому что мы предполагали, что все виды людей захотят создавать локальные переменные с именами, такими как "set" и "value".«params» - даже не английское слово, поэтому кажется менее вероятным, что кто-то захочет его использовать.Нет большой выгоды сделать его контекстным, поэтому стоимость функции неоправданна.