TObjectをTObjectList <T>としてキャストするにはどうすればよいですか?

ノルゲポール

TObjectsの配列をリストに挿入する必要があるプロシージャがありますリストはサポートされているタイプ、例えばのいずれかであることができTObjectListTObjectList<T>TROArray、など

手順は次のようになります。

type
  TObjectArray = Array of TObject;

...

procedure TMyClass.DoAssignObjectList(const ObjectArray: TObjectArray;
  const DstList: TObject);
var
  i: Integer;
begin
  if DstList is TObjectList then
  begin
    for i := 0 to pred(TObjectList(DstList).Count) do
      TObjectList(DstList).Add(ObjectArray[i]);
  end else
  if DstList is TObjectList<T> then // Obviously this doesn't work
  begin
    for i := 0 to pred(TObjectList<T>(DstList).Count) do
      TObjectList<T>(DstList).Add(ObjectArray[i]);
  end
  else
  begin
    raise Exception.CreateFmt(StrNoDoAssignORMObject, [DstList.ClassName]);
  end;
end;

オブジェクトがであるかどうかを確認してTObjectList<T>から、配列の要素をオブジェクトに追加するにはどうすればよいですか?

ステファン・グリエンケ

ジェネリック型に関する詳細情報を取得するには、少しRTTIを使用する必要があります。

次のコードは、そのためのいくつかのメソッドを持つSpring4Dを使用しています。

uses 
  ...
  Spring.Reflection;

procedure DoAssignObjectList(const ObjectArray: TObjectArray;
  const DstList: TObject);

  function IsGenericTObjectList(const obj: TObject): Boolean;
  var
    t: TRttiType;
  begin
    t := TType.GetType(obj.ClassInfo);
    Result := t.IsGenericType and (t.GetGenericTypeDefinition = 'TObjectList<>');
  end;

begin
  ...
  if IsGenericTObjectList(DstList) then
  begin
    for i := 0 to pred(TObjectList<TObject>(DstList).Count) do
      TObjectList<TObject>(DstList).Add(ObjectArray[i]);
  ...
end;

さらに、リストの汎用パラメータータイプに関する情報を取得して、リストに入力するオブジェクトが要件に一致しているかどうかを確認することもできます(もちろん、汎用タイプでのみ機能します)。

function GetGenericTObjectListParameter(const obj: TObject): TClass;
var
  t: TRttiType;
begin
  t := TType.GetType(obj.ClassInfo);
  Result := t.GetGenericArguments[0].AsInstance.MetaclassType;
end;

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

イテレータでTにキャストしても安全かどうかを確認するにはどうすればよいですか?

分類Dev

How do I cast a TObject as a TObjectList<T>?

分類Dev

ストアプロシージャへの入力としてテーブルを送信するc#のMySQLストアドプロシージャを使用するにはどうすればよいですか?T-SQLを使用しています

分類Dev

List <T>を継承する型にリストをキャストするにはどうすればよいですか?

分類Dev

ブートメニューをスキップして、Thinkpad T420をGRUBから直接ブートするにはどうすればよいですか?

分類Dev

&HashSet <&T>をIntoIterator <Item =&T>として使用するにはどうすればよいですか?

分類Dev

値をキャストするための関数を作成するにはどうすればよいですか:x `as` T = y?

分類Dev

Dart 2でintをBigIntとしてキャストするにはどうすればよいですか?

分類Dev

Arc <T>をTと比較するにはどうすればよいですか?

分類Dev

InternalLinkedHashMapをMap <dynamic、dynamic>としてキャストするにはどうすればよいですか?

分類Dev

NextJS router.queryを数値としてキャストするにはどうすればよいですか?

分類Dev

計算された各アイテムをキャッシュするObservableを作成するにはどうすればよいですか?(Lazy <T>と同等)

分類Dev

ReScriptで動的な値をJs.tキーとして設定するにはどうすればよいですか?

分類Dev

生のエスケープ文字を\ tおよび\ nとしてcoutに出力するにはどうすればよいですか?

分類Dev

タブ(\ t)などの特殊文字をレンダリングせずにWebページにテキストとして表示するにはどうすればよいですか?

分類Dev

ジェネリックTをTObjectにキャストする方法は?

分類Dev

Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

分類Dev

synを使用しているときにOption <T>からTを取得するにはどうすればよいですか?

分類Dev

「for」ループを使用して、pairwise.t.testをリストに実行するにはどうすればよいですか?

分類Dev

uint32_tマスクをポインター変数として保存するにはどうすればよいですか?

分類Dev

static_cast <T>を関数として渡すにはどうすればよいですか?

分類Dev

Rでglm()を使用してt分布を使用するにはどうすればよいですか?

分類Dev

TObjectlist を TObjectDataset で使用する TObjectList<T> に変換するプロセス

分類Dev

Tとは異なる型のProxy <T>を引数として使用するにはどうすればよいですか?

分類Dev

TがIEquatableを実装しているときに2List <T>を比較するにはどうすればよいですか?

分類Dev

Robo3Tを使用してAWSDocumentdbに接続するにはどうすればよいですか?

分類Dev

クエリを使用して複数のリスト<T>のコレクションを検索するにはどうすればよいですか?

分類Dev

リモートT-SQLプロシージャを呼び出して、リモート.bakデータベースファイルをリモートSQL Serverインスタンスに復元するにはどうすればよいですか?

分類Dev

オブジェクトとしてキャストされているデータ行に1を追加するにはどうすればよいですか?

Related 関連記事

  1. 1

    イテレータでTにキャストしても安全かどうかを確認するにはどうすればよいですか?

  2. 2

    How do I cast a TObject as a TObjectList<T>?

  3. 3

    ストアプロシージャへの入力としてテーブルを送信するc#のMySQLストアドプロシージャを使用するにはどうすればよいですか?T-SQLを使用しています

  4. 4

    List <T>を継承する型にリストをキャストするにはどうすればよいですか?

  5. 5

    ブートメニューをスキップして、Thinkpad T420をGRUBから直接ブートするにはどうすればよいですか?

  6. 6

    &HashSet <&T>をIntoIterator <Item =&T>として使用するにはどうすればよいですか?

  7. 7

    値をキャストするための関数を作成するにはどうすればよいですか:x `as` T = y?

  8. 8

    Dart 2でintをBigIntとしてキャストするにはどうすればよいですか?

  9. 9

    Arc <T>をTと比較するにはどうすればよいですか?

  10. 10

    InternalLinkedHashMapをMap <dynamic、dynamic>としてキャストするにはどうすればよいですか?

  11. 11

    NextJS router.queryを数値としてキャストするにはどうすればよいですか?

  12. 12

    計算された各アイテムをキャッシュするObservableを作成するにはどうすればよいですか?(Lazy <T>と同等)

  13. 13

    ReScriptで動的な値をJs.tキーとして設定するにはどうすればよいですか?

  14. 14

    生のエスケープ文字を\ tおよび\ nとしてcoutに出力するにはどうすればよいですか?

  15. 15

    タブ(\ t)などの特殊文字をレンダリングせずにWebページにテキストとして表示するにはどうすればよいですか?

  16. 16

    ジェネリックTをTObjectにキャストする方法は?

  17. 17

    Fn(T)+ '静的レジスタを'ジェネリック型引数Tの '静的として作成するにはどうすればよいですか?

  18. 18

    synを使用しているときにOption <T>からTを取得するにはどうすればよいですか?

  19. 19

    「for」ループを使用して、pairwise.t.testをリストに実行するにはどうすればよいですか?

  20. 20

    uint32_tマスクをポインター変数として保存するにはどうすればよいですか?

  21. 21

    static_cast <T>を関数として渡すにはどうすればよいですか?

  22. 22

    Rでglm()を使用してt分布を使用するにはどうすればよいですか?

  23. 23

    TObjectlist を TObjectDataset で使用する TObjectList<T> に変換するプロセス

  24. 24

    Tとは異なる型のProxy <T>を引数として使用するにはどうすればよいですか?

  25. 25

    TがIEquatableを実装しているときに2List <T>を比較するにはどうすればよいですか?

  26. 26

    Robo3Tを使用してAWSDocumentdbに接続するにはどうすればよいですか?

  27. 27

    クエリを使用して複数のリスト<T>のコレクションを検索するにはどうすればよいですか?

  28. 28

    リモートT-SQLプロシージャを呼び出して、リモート.bakデータベースファイルをリモートSQL Serverインスタンスに復元するにはどうすればよいですか?

  29. 29

    オブジェクトとしてキャストされているデータ行に1を追加するにはどうすればよいですか?

ホットタグ

アーカイブ