首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改变体属性-名称(Delphi)

更改变体属性-名称(Delphi)
EN

Stack Overflow用户
提问于 2018-03-12 10:41:56
回答 1查看 411关注 0票数 0

我正在为Delphi学习一个很好的框架mORMot,我发现了许多有用的Variant函数(在SynCommons中)。

现在我想更改Variant的一些属性名,但是搜索之后我没有找到这样的函数,所以我决定编写一个:

代码语言:javascript
复制
program Project7;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, SynCommons;

function VariantChangeNames(var V: Variant; const FromNames, ToNames: TRawUTF8DynArray): Boolean;
var
  Name: RawUTF8;
  PData: PDocVariantData;
  Val: Variant;
  i, k: Integer;
begin
  Result := False;
  PData := DocVariantData(V);
  i := 0;
  for Name in FromNames do
  begin
    k := PData^.GetValueIndex(Name);
    if k <> -1 then
    begin
      Val := PData^.Value[k];
      PData^.Value[ToNames[i]] := Val;
      PData^.Delete(k); // If delete before setting value, Val will be incorrect.
      Result := True;
    end;
    Inc(i);
  end;
end;

var
  V: Variant;
begin
  V := TDocVariant.New();
  V.Name := 'John';
  V.Age := 20;
  VariantChangeNames(V, ['Name'], ['RealName']);
  Writeln(VariantToString(V)); // {"Age":20,"RealName":"John"}
end.

我编写的VariantChangeNames可能不是很有效,因为它需要同时执行deleteadd。直接修改TDocVariantDataTDocVariantData成员似乎是最有效的方法,但它是一个私有成员。

有什么建议吗?提前谢谢。

顺便说一句: mORMot官方论坛的邮件服务器似乎有问题,当我发布一个主题时,它显示:

代码语言:javascript
复制
An error was encountered
Error: Could not connect to smtp host "217.70.184.11" (111) (Connection refused).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-14 04:11:39

这个问题在mORMot论坛中得到了解决。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49233203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档