Я пытался создать общий метод для чтения значений столбцов из DataRow с помощью методов datarowextension:Неоднозначные ссылки между обобщенными методами
public static Nullable<T> SafeRead<T>(DataRow row, string fieldName) where T : struct
{
if (row.HasColumn(fieldName))
{
return row.Field<Nullable<T>>(fieldName) ?? default(Nullable<T>);
}
else
return default(Nullable<T>);
}
public static T SafeRead<T>(DataRow row, string fieldName) where T : class
{
if (row.HasColumn(fieldName))
{
return row.Field<T>(fieldName) ?? default(T);
}
else
return default(T);
}
Когда я вызываю эту функцию из моего кода компилятор жалуется, что есть двусмысленная ссылка между двумя вызовами, которая очевидна, когда я смотрю на подписи метода. Однако я не уверен, как справиться с этим, не используя отдельные методы.
Как вы даже управляя, чтобы * объявить * эти два метода? Я ожидаю, что компилятор пожалуется, что вы пытаетесь перегрузить только возвращаемое значение. –
@john Вы правы насчет компилятора, жалующегося на неоднозначные методы. Я только пытался понять, может ли C# указать способ перегрузки на основе общих ограничений параметров. – koder
Право - это просто. Нет, ты не можешь. –