Visual Studio сообщает, что существует неоднозначный вызов, когда существует только один метод с данным именем.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Visual Studio сообщает, что существует неоднозначный вызов, когда существует только один метод с данным именем.

Сообщение Anonymous »

Я пытаюсь понять, почему это происходит, но не могу. У меня есть служба WCF, и внутри нее я создал класс ExtensionUtil, который будет состоять только из методов расширения.

На данный момент единственный метод, который у меня есть в классе ExntensionUtil, — это называется AddWithNullableValue. Выглядит это так:

Код: Выделить всё

public static void AddWithNullableValue(this SqlParameterCollection paramCollection, string paramName, object value)
{
SqlParameter param = new SqlParameter();

param.ParameterName = paramName;
param.Value = value == null ? DBNull.Value : value;

paramCollection.Add(param);
}
Я использую этот метод в DAL следующим образом:

Код: Выделить всё

sqlCommand.Parameters.AddWithNullableValue("@categoryId", publication.CategoryId);
Все компилируется нормально. Однако когда я пытаюсь запустить службу, возникает ошибка компиляции:

Код: Выделить всё

The call is ambiguous between the following methods or properties:
'App_Code.Util.ExtensionUtil.AddWithNullableValue(System.Data.SqlClient.SqlParameterCollection, string, object)' and
'App_Code.Util.ExtensionUtil.AddWithNullableValue(System.Data.SqlClient.SqlParameterCollection, string, object)'
Почему это происходит? У меня есть только один метод с таким именем, и компилятор говорит, что вызов неоднозначен.

Изменить:

Когда я удаляю ключевое слово this перед параметром SqlParameterCollection, делая метод обычным статическим методом, а не расширенным, все работает нормально. Более того, я просмотрел все решение (с помощью Ctrl+Shift+F) на предмет всех вхождений ключевого слова AddWithNullableValues, и поиск привел к следующему: сигнатуре метода и двум местам в моем коде, где я его вызываю. Затем я даже создал совершенно новый статический класс, добавил тот же метод с совершенно другим именем и тем же телом, и при его вызове все равно получал ту же ошибку, так что проблема, должно быть, в чем-то другом.

Наконец, мне понадобился еще один метод расширения, и когда я вызвал его в своем коде, я получил ту же ошибку.

Код: Выделить всё

public static Nullable GetNullableValue(this SqlDataReader sqlDataReader, string columnName) where T : struct
{
int columnIndex = sqlDataReader.GetOrdinal(columnName);

Nullable value = null;

if (!sqlDataReader.IsDBNull(columnIndex))
{
value = (Nullable)sqlDataReader.GetValue(columnIndex);
}

return value;
}
Мне кажется, что решение имеет какую-то проблему с методами расширения, и я не знаю, почему. Пару раз успешно собрал, попробовал почистить - все работает нормально, пока не попробую использовать метод расширения как метод расширения, а не как статический метод.

Подробнее здесь: https://stackoverflow.com/questions/241 ... y-a-single
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Неоднозначный вызов метода в Android Studio
    Anonymous » » в форуме Android
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Неоднозначный вызов функции при перегрузке ссылочными типами в C++
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Я получил неоднозначный вызов функции, хотя функция имеет разные параметры
    Anonymous » » в форуме C++
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • CS0121 Неоднозначный вызов с инициализатором коллекции [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Неоднозначный вызов между двумя расширением C# Extension Generic Methode One, где T: класс и другие, где t: struct
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»