Не могу привести valueType к BigInteger

161
20 июля 2018, 21:10

BitInteger у меня из System.Numerics. Этот код выдает InvalidCastException: Заданное приведение является недопустимым на второй строке.

BigInteger bigint1 = (BigInteger)3455;
BigInteger bigint2 = (BigInteger)(ValueType)3455;

И все бы ничего, но на msdn так делают, и все в порядке. Что я делаю не так?

Вообще, я пытаюсь написать оператор приведения типа 'To'. Для классов все просто, а вот для структур я пытаюсь реализовать такой метод:

public static T To<T>(this ValueType o)

И все же, на msdn есть такой код:

public static NumericRelationship Compare(ValueType value1, ValueType value2)
{
  // Use BigInteger as common integral type
  if (IsInteger(value1) && IsInteger(value2)) {
     BigInteger bigint1 = (BigInteger) value1;
     BigInteger bigint2 = (BigInteger) value2;
     return (NumericRelationship) BigInteger.Compare(bigint1, bigint2);
  }
}
public static bool IsInteger(ValueType value)
{         
  return (value is SByte || value is Int16 || value is Int32 
          || value is Int64 || value is Byte || value is UInt16  
          || value is UInt32 || value is UInt64 
          || value is BigInteger); 
}

Они же приводят к BigInteger, почему у меня этот код не работает?

Answer 1

Исключение вылетало, потому что в моем коде при приведении к valuetype туда заносится int, а я потом пытаюсь достать оттуда BigInteger. BigInteger не является супертипом для int, поэтому и получалась ошибка приведения. Нисходящее преобразование. metanit | msdn

READ ALSO
Вывод ответа с устройства по протоколу modbus RTU C#

Вывод ответа с устройства по протоколу modbus RTU C#

Столкнулся с проблемой: необходимо считывать данные с устройств по протоколу modbusЯ не могу понять, как получить ответ от устройства

356
Путь к картинке в MySQL

Путь к картинке в MySQL

При передачи строки расположения картинки убираются слеши (\);

165
C# Баг progress bar.

C# Баг progress bar.

имеем небольшой кусок кода, который по клику на кнопку вызывает cmd, и в ней исполняет apache benchНадо показать прогресс бар

189
Блок catch не выполняется

Блок catch не выполняется

Выполняю удаленную отладку сайта, который находится на веб-сервере IIS

174