Форум: "Основная";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
Вниз"Правильно" преобразовать тип Variant Найти похожие ветки
← →
Jungle (2008-05-26 17:13) [0]var
i: Шnteger;
v: Variant;
....
v := 1.5;
i := VarAsType(v, varInteger);
...
В данном случае i = 2, а хотелось бы, чтоб генерировалось исключение о несоответствии типов. Можно, конечно, сначала преобразовать значение v в строковое, а потом воспользоваться функцией StrToInt. В этом случае будет генерироваться EConvertError, однако это же исключение будет генерироваться и в случае слишком большого значения v. А функция VarAsType в случае переполнения генерирует EVariantOverflowError.
Вопрос: есть ли стандартный способ правильно сконвертировать значение, чтобы корректно отловить оба типа исключений (переполнение и несоответствие типов) и не городить при этом кучу лишнего кода?
← →
Palladin © (2008-05-26 17:15) [1]
> исключение о несоответствии типов
такого исключения нет, суть есть ошибка компиляции
← →
clickmaker © (2008-05-26 17:21) [2]if (VarType(v) <> TypeToConvert) then
несоответствие типов
?
← →
Jungle (2008-05-27 08:28) [3]Palladin
Под исключением о несоответствии типов я имел в виду что-то типаEConvertError или EVariantTypeCastError.
clickmaker
А если у меня v = "1" (строковый), а TypeToConvert = varInteger? В этом случае VarType(v) <> TypeToConvert, но я могу преобразовать v в Integer. Если v = "1,5", то в результате преобразования получу опять 2.
← →
Gadenysh (2008-05-27 08:39) [4]ну так и сравни результаты приведения к Integer и Float
← →
Jungle (2008-05-27 09:26) [5]Gadenysh
Точно. Благодарю. А то я как всегда в дебри полез :)
← →
Anatoly Podgoretsky © (2008-05-27 09:39) [6]raise EConvertError .Create;
← →
Leonid Troyanovsky © (2008-05-27 11:01) [7]
> Jungle (26.05.08 17:13)
> Вопрос: есть ли стандартный способ правильно сконвертировать
> значение, чтобы корректно отловить оба типа исключений (переполнение
> и несоответствие типов) и не городить при этом кучу лишнего
> кода?
function VarToInt(v: variant): Longint;
begin
try
Result := StrToInt(v);
except
on E: EConvertError do
raise EVariantError.CreateFmt("Invalid variant type conversion: %s", [E.Message]);
end;
end;
--
Regards, LVT.
← →
Leonid Troyanovsky © (2008-05-27 11:14) [8]
> Leonid Troyanovsky © (27.05.08 11:01) [7]
> raise EVariantError.CreateFmt("Invalid variant type
> conversion: %s", [E.Message]);
uses SysConst;
raise EVariantError.CreateFmt("%s: %s", [SInvalidVarCast, E.Message]);
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2009.08.09;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c