Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1244179520
DelphiN!
2009-06-05 09:25
2009.08.09
Какая какая из мышек произвела действие?


15-1244210713
evgenij
2009-06-05 18:05
2009.08.09
значение переменных


2-1245065034
b/@.
2009-06-15 15:23
2009.08.09
Какое практическое применение UniqueString ?


11-1204994235
Blackman
2008-03-08 19:37
2009.08.09
[KOL-CE] Есть какие-нибудь библиотеки сжатия для KOL-CE?


2-1244622176
Apic
2009-06-10 12:22
2009.08.09
смена атрибутов файла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский