Преобразование типа данных с помощью параметра - проблема с областью видимости ChangeType ()

1

Я хочу преобразовать var на основе Тип другой переменной.

Причиной этого является то, что у меня есть метод расширения, который будет применять вычисление на T, обеспечивающее, что T - это double, float или decimal (я проверяю правильный тип в начале метода).

Так или иначе, тестирование конверсии с помощью следующего фрагмента кода вызывает ошибку:

      List<double> source = new List<double>();
      source.Add(1);
      Type typ = source.First().GetType();
      var newVal = Convert.ChangeType(source.First(), typeof(typ));  //error: typ not found

Тип или имя пространства имен "typ" не удалось найти (вы не указали директиву использования или ссылку на сборку?)

Однако это прекрасно работает:

      List<double> source = new List<double>();
      source.Add(1);
      Type typ = source.First().GetType();
      var newVal = Convert.ChangeType(source.First(), typeof(double));
  • 0
    typeof не принимает переменную в качестве параметра.
Теги:
collections

1 ответ

3

обратите внимание, что объект Type и ссылка на тип - это не одно и то же.

В то время как Type typ создает объект типа Type, typeof(T) возвращает объект Type на основе T, который известен во время компиляции (для генериков это время JIT-компиляции, но оно работает одинаково).

Таким образом, вы не можете использовать объект Type для общего параметра напрямую, потому что он является объектом, а не ссылкой на тип.

Обратите внимание, однако, что поскольку typeof возвращает объект Type, этот случай можно решить, используя typ напрямую.

  List<double> source = new List<double>();
  source.Add(1);
  Type typ = source.First().GetType();
  var newVal = Convert.ChangeType(source.First(), typ);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню