首先官方的定义:

  TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
    tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
    tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray, tkUString,
    tkClassRef, tkPointer, tkProcedure, tkMRecord);

 

测试自动转换:

procedure add(data: array of TValue);
var
  i: Integer;
  key: string;
begin
  for i := 0 to (Length(data) - 1) do
  begin
    if (i mod 2) = 0 then
    begin
      key := data[i].AsString;
    end else begin
      map2.Add(key, data[i]);
    end;
  end;
end;

 

 

procedure TForm1.btn2Click(Sender: TObject);
var
  key: string;
begin
  add([
  's', '我是一个字符串', // tkUString
  's2', 'c',// tkUString
  'i32', 32, //  tkInteger
  'i64', 9223372036854775708,//2的63次方 - 100 ;  tkInt64
  'ui64', 18446744073709551516, //2的64次方 - 100; 依然是 tkInt64 类型,结果不影响
  'bl', True, // tkEnumeration
  'fl', 2323.23223//tkFloat
  ]);

  for key in map2.Keys do
  begin
    mmo1.Lines.Add(key + ' --- ' +  TValue.From<TTypeKind>(map2.Items[key].Kind).ToString);
  end;

  if map2.Items['bl'].AsBoolean then
  begin
    mmo1.Lines.Add('yes');

  end else begin
    mmo1.Lines.Add('no');
  end;

  //测试uint64,是否正常
  mmo1.Lines.Add(map2.Items['ui64'].AsUInt64.ToString); // 18446744073709551516,结果正常
end;

 

 

 

posted on 2023-05-11 16:28  del88  阅读(29)  评论(0编辑  收藏  举报