Что такое объявленный тип SelectedValues
и wells
?Методы расширения связаны во время компиляции, а не во время выполнения, поэтому важны типы времени компиляции.
Редактировать: Поскольку вы сказали, что SelectedValues
объявлен как тип IList
, единственный возможный кандидатдля использования в качестве метода расширения для SelectedValues
из трех указанных вами значений будет
public static void Replace<T>(this IList list, T newItem)
. Затем компилятор понимает, что он может рассматривать wells
как T
с T
как объявленным типомwells
и затем может вызвать метод
public static void Replace<T>(this IList list, T newItem)
, где SelectedValues
заполняет для параметра list
и wells
, заполняет для параметра newItem
, и объявленный тип wells
заполняет параметр типа T
.Вот почему этот метод расширения вызывается.
Опять же, методы расширения связаны во время компиляции.Если вы хотите вызвать другой метод, вам нужно использовать другой объявленный тип для SelectedValues
.
Таким образом, это не случай компилятора "Соответствующий неправильный метод расширения", это случайкомпилятор, соответствующий единственно возможному методу расширения.Такое поведение является особенностью;это особенность, а не ошибка.