delphi遍历record
<p>delphi遍历record</p><p>通过rtti遍历record,支持delphi2010以上版本,更低版本不支持。</p>
<p>可以遍历record的field的名称、类型和长度。</p>
<p> uses system.rtti</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">type
Ttest </span>=<span style="color: rgba(0, 0, 0, 1)"> record
str: </span><span style="color: rgba(0, 0, 255, 1)">string</span><span style="color: rgba(0, 0, 0, 1)">;
i32: Integer;
i64: Int64;
sgl: Single;
dbl: Double;
ext: Extended;
dt: TDateTime;
bt: Byte;
end;</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">遍历record</span>
<span style="color: rgba(0, 0, 0, 1)">
procedure loopRecord(aTypeInfo, instance: Pointer);
begin
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> RTX: TRttiContext;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> RT: TRttiType;
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> RF: TRttiField;
RT :</span>=<span style="color: rgba(0, 0, 0, 1)"> RTX.GetType(aTypeInfo);
</span><span style="color: rgba(0, 0, 255, 1)">for</span> RF <span style="color: rgba(0, 0, 255, 1)">in</span> RT.AsRecord.GetFields <span style="color: rgba(0, 0, 255, 1)">do</span><span style="color: rgba(0, 0, 0, 1)">
Memo1.Lines.Add(RF.Name </span>+ <span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span> + RF.GetValue(instance).ToString + <span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span> + RF.FieldType.ToString + <span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(128, 0, 0, 1)">'</span> +<span style="color: rgba(0, 0, 0, 1)"> RF.RttiDataSize.ToString);
RTX.Free;
RF.Free;
RT.Free;
end;</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">procedure TForm1.button6Click(Sender: TObject);</span><span style="color: rgba(0, 0, 0, 1)">
begin
</span><span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> t: Ttest;
t.str :</span>= <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">str</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">;
t.i32 :</span>= <span style="color: rgba(128, 0, 128, 1)">32</span><span style="color: rgba(0, 0, 0, 1)">;
t.i64 :</span>= <span style="color: rgba(128, 0, 128, 1)">64</span><span style="color: rgba(0, 0, 0, 1)">;
t.sgl :</span>= <span style="color: rgba(128, 0, 128, 1)">1.1</span><span style="color: rgba(0, 0, 0, 1)">;
t.dbl :</span>= <span style="color: rgba(128, 0, 128, 1)">2.2</span><span style="color: rgba(0, 0, 0, 1)">;
t.ext :</span>= <span style="color: rgba(128, 0, 128, 1)">3.3</span><span style="color: rgba(0, 0, 0, 1)">;
t.dt :</span>=<span style="color: rgba(0, 0, 0, 1)"> Now;
t.bt :</span>= <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">;
loopRecord(TypeInfo(Ttest), @t);
end;</span></pre>
</div>
<p>执行结果</p>
<div class="cnblogs_code">
<pre>str str <span style="color: rgba(0, 0, 255, 1)">string</span> <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">
i32 </span><span style="color: rgba(128, 0, 128, 1)">32</span> Integer <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">
i64 </span><span style="color: rgba(128, 0, 128, 1)">64</span> Int64 <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">
sgl </span><span style="color: rgba(128, 0, 128, 1)">1.10000002384186</span> Single <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">
dbl </span><span style="color: rgba(128, 0, 128, 1)">2.2</span> Double <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">
ext </span><span style="color: rgba(128, 0, 128, 1)">3.3</span> Extended <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">
dt </span><span style="color: rgba(128, 0, 128, 1)">2022</span>-<span style="color: rgba(128, 0, 128, 1)">05</span>-<span style="color: rgba(128, 0, 128, 1)">13</span> <span style="color: rgba(128, 0, 128, 1)">20</span>:<span style="color: rgba(128, 0, 128, 1)">01</span>:<span style="color: rgba(128, 0, 128, 1)">47</span> TDateTime <span style="color: rgba(128, 0, 128, 1)">14</span><span style="color: rgba(0, 0, 0, 1)">
bt </span><span style="color: rgba(128, 0, 128, 1)">1</span> Byte <span style="color: rgba(128, 0, 128, 1)">14</span></pre>
</div>
<p> </p>
</div>
<div id="MySignature" role="contentinfo">
<p>本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/16197903.html</p><br><br>
来源:https://www.cnblogs.com/hnxxcxg/p/16197903.html
頁:
[1]