0

私は相対性理論が初めてで、a2 コンピューティングのコースワーク用に複雑な検索アルゴリズムを作成しようとしています。文字列変数から自分のレコード フィールドにアクセスする必要があります。例えば

         getfield(record,'name');

問題を解決できる記事を見つけましたが、意味がわかりません。誰かが私が必要とするものだけに短くすることができます. ありがとう。

http://theroadtodelphi.wordpress.com/2010/10/10/fun-with-delphi-rtti-dump-a-trttitype-definition/

4

1 に答える 1

6

コメントからLU RDのコードを完全に単純化したものです。これは Delphi XE2 でコンパイルおよび動作しますが、以前のバージョンでも問題ないはずです。

program Project4;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils, RTTI, TypInfo;

type
  TSampleRecord = record
    SomeInt: Integer;
    SomeStr: String;
    SomeFloat: Single;
  end;

function GetField(Rec: TValue; const FieldName: String): String;
var
  Context: TRTTIContext;
  RTTIRecord: TRTTIRecordType;
  RecField: TRTTIField;
  RecValue: TValue;
begin
  if (Rec.Kind = tkRecord) then
  begin
    RTTIRecord := Context.GetType(Rec.TypeInfo).AsRecord;
    RecField := RTTIRecord.GetField(FieldName);

    RecValue := RecField.GetValue(Rec.GetReferenceToRawData);
    Result := RecValue.ToString();

    if (RecValue.Kind = tkFloat) then
      Result := Format('%.4f', [RecValue.AsExtended]);
  end;
end;

var
  SR: TSampleRecord;
begin
  SR.SomeInt := 1992;
  SR.SomeStr := 'Lorem ipsum dolor sit amet';
  SR.SomeFloat := 3.1415;

  Writeln(GetField(TValue.From(SR), 'SomeInt'));
  Writeln(GetField(TValue.From(SR), 'SomeStr'));
  Writeln(GetField(TValue.From(SR), 'SomeFloat'));

  Readln;
end.
于 2013-02-01T10:06:44.280 に答える