我正在为Delphi学习一个很好的框架mORMot,我发现了许多有用的Variant函数(在SynCommons中)。
现在我想更改Variant的一些属性名,但是搜索之后我没有找到这样的函数,所以我决定编写一个:
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可能不是很有效,因为它需要同时执行delete和add。直接修改TDocVariantData的TDocVariantData成员似乎是最有效的方法,但它是一个私有成员。
有什么建议吗?提前谢谢。
顺便说一句: mORMot官方论坛的邮件服务器似乎有问题,当我发布一个主题时,它显示:
An error was encountered
Error: Could not connect to smtp host "217.70.184.11" (111) (Connection refused).发布于 2018-03-14 04:11:39
这个问题在mORMot论坛中得到了解决。
https://stackoverflow.com/questions/49233203
复制相似问题