Вызов универсального метода расширения с типом знания времени выполнения в качестве аргументаC#

Место общения программистов C#
Ответить
Anonymous
 Вызов универсального метода расширения с типом знания времени выполнения в качестве аргумента

Сообщение Anonymous »

У меня есть общее расширение:

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

public static T Get(this DataRow row, string columnName)
{
if (row == null || string.IsNullOrWhiteSpace(columnName) || row.IsNull(columnName))
if (typeof(T) == typeof(string))
return (T)(object)string.Empty;
else
return default(T);
else
{
if (row[columnName].GetType() == typeof(T))
return row.Field(columnName);
else
{
return (T)Convert.ChangeType(row[columnName], typeof(T));
}
}
}
Я хочу использовать его с типом, известным во время выполнения:

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

obj = new K();
var props = obj.GetType().GetProperties();
for (int i = 0; i < props.Length; i++)
{
if (row.Table.Columns.Contains(props[i].Name))
{
// props[i].SetValue(obj, row[prop]);
props[i].SetValue(obj, row.Get(props[i].Name));
}
}
Но я получаю:

Ошибка компилятора CS0019: оператор «оператор» нельзя применить к операндам типа «тип» ' и 'type'

Как я могу вызвать общее расширение, если тип известен во время выполнения?
Я пробовал это решение:
Обобщенные методы в C#, используя тип переменной в качестве параметра
но безуспешно - возможно, потому, что я использую расширение ?

Подробнее здесь: https://stackoverflow.com/questions/784 ... s-argument
Ответить

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

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

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

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

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