rareMax Опубликовано 22 декабря, 2016 Поделиться Опубликовано 22 декабря, 2016 Помогите разобраться, как можно записать массив в TValue. Пробовал следующим образом: {$APPTYPE CONSOLE} {$R *.res} uses System.Rtti, System.SysUtils, System.TypInfo; procedure TestArrayTValue; var FValue: TValue; FInputArray: TArray<String>; FInputValue: TArray<TValue>; I: Integer; Begin FInputArray := ['1', '2', '3']; SetLength(FInputValue, length(FInputArray)); for I := Low(FInputValue) to High(FInputValue) do FInputValue[I] := FInputArray[I]; FValue.FromArray(PTypeInfo(FInputValue), FInputValue); End; begin try { TODO -oUser -cConsole Main : Insert code here } TestArrayTValue; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. но к сожалению ошибка: Цитата First chance exception at $751AA832. Exception class EArgumentException with message 'ArrayTypeInfo'. Process Project12.exe (4256) Цитата Ссылка на комментарий
1 Администраторы Brovin Yaroslav Опубликовано 22 декабря, 2016 Администраторы Поделиться Опубликовано 22 декабря, 2016 Так не работает? TValue.From<TArrayString>(Arr); rareMax 1 Цитата Ссылка на комментарий
0 rareMax Опубликовано 22 декабря, 2016 Автор Поделиться Опубликовано 22 декабря, 2016 В одну сторону работает. Type TArrayString = Array of String; //TArrayString = TArray<String>; procedure TestArrayTValue; var FValue: TValue; FInputArray, Return: TArrayString; // TArray<String>; I: Integer; Begin FInputArray := ['1', '2', '3']; FValue.From<TArrayString>(FInputArray); Writeln('is TArrayString: ', FValue.IsType<TArrayString>); Return := FValue.AsType<TArrayString>; { Возвращает пустой массив -_- } Writeln('Length: ', Length(Return)); for I := Low(Return) to High(Return) do Writeln(Return[I]); End; В консоле: Цитата is TArrayString: TRUE Length: 0 Определяет что это массив - но не возвращает элементы. Или неправильно извлекаю их? Цитата Ссылка на комментарий
1 egorea1999 Опубликовано 24 декабря, 2016 Поделиться Опубликовано 24 декабря, 2016 FInputArray := ['1', '2', '3']; FValue := TValue.From<TArrayString>(FInputArray); Writeln('is TArrayString: ', FValue.IsType<TArrayString>); SetLength(Return, Length(FValue.AsType<TArrayString>)); FValue.ExtractRawData(@Return); Writeln('Length: ', Length(Return)); for I := Low(Return) to High(Return) do Writeln(Return[I]); rareMax 1 Цитата Ссылка на комментарий
Вопрос
rareMax
Помогите разобраться, как можно записать массив в TValue. Пробовал следующим образом:
но к сожалению ошибка:
Ссылка на комментарий
3 ответа на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.