4

オブジェクトのリストをX++に保存したい。配列とコンテナはオブジェクトを格納できないことをmsdnで読んだので、唯一のオプションはコレクションのリストを作成することです。私は次のコードを書いて使用しようとしましCollection = new List(Types::AnyType);Collection = new List(Types::Classes);が、両方とも機能していません。次の仕事で間違いがないか確認してください。

static void TestList(Args _args)
{
    List Collection;
    ListIterator iter;
    anytype iVar, sVar, oVar;

    PlmSizeRange PlmSizeRange;
    ;
    Collection = new List(Types::AnyType);

    iVar = 1;
    sVar = "abc";
    oVar = PlmSizeRange;
    Collection.addEnd(iVar);
    Collection.addEnd(sVar);
    Collection.addEnd(oVar);    

    iter = new ListIterator(Collection);
    while (iter.more())
    {
        info(any2str(iter.value()));
        iter.next();
    }
}

さらに、変数やオブジェクトをAnytype変数にキャストすることはできません。型キャストは、この方法で自動的に行われることを読みました。

anytype iVar;
iVar = 1;

しかし、実行すると、予期された型がAnytypeであるというエラーがスローされますが、検出された型はintです。

4

1 に答える 1

6

最後に、anytype変数は最初に割り当てられた型を取ります。後で変更することはできません。

static void Job2(Args _args) 
{
    anytype iVar;
    iVar = 1;             //Works, iVar is now an int!
    iVar = "abc";         //Does not work, as iVar is now bound to int, assigns 0
    info(iVar); 
}

最初の質問に戻るとnew List(Types::AnyType)addEndメソッドは実行時に引数の型をテストし、anytype変数には値の型が割り当てられているため、機能しません。

またnew List(Types::Object)、オブジェクトのみを格納し、単純なデータ型はintおよびとしては格納しませんstr。それはあなた(そしてC#)が信じていることに反するかもしれませんが、単純な型はオブジェクトではありません。

何が残っていますか?コンテナ:

static void TestList(Args _args)
{
    List collection = new List(Types::Container);
    ListIterator iter;
    int iVar;
    str sVar;
    Object oVar;
    container c;
    ;
    iVar = 1;
    sVar = "abc";
    oVar = new Object();
    collection.addEnd([iVar]);
    collection.addEnd([sVar]);
    collection.addEnd([oVar.toString()]);
    iter = new ListIterator(collection);
    while (iter.more())
    {
        c = iter.value();
        info(conPeek(c,1));
        iter.next();
    }
}

オブジェクトは自動的にコンテナに変換されません。通常は、メソッドpackunpackメソッドを提供します(インターフェイスを実装しますSysPackable)。上記のコードでは、toString不正行為を行っているコードが使用されています。

一方、リストには任意のタイプが含まれている必要があるという、リクエストのユースケースはわかりません。これは設計された目的に反しており、リストには、リストオブジェクトの作成時に定義された唯一のタイプが含まれます。

リストの他に、他のコレクションタイプもありますが、 Structがニーズに合うかもしれません。

于 2012-10-10T11:01:00.957 に答える