0

クラスがあります。それを MyClass と呼びましょう。いくつかのプロパティがあり、そのうちの 1 つは COM オブジェクト (ESRI ArcObjects の IFeature) です。その他のプロパティは、標準の .NET オブジェクトです。したがって、次のようになります。

public class MyClass
{
   //COM object
   public IFeature Feature { get; set; }
   public MyOtherClass Other { get; set; }
}

この人物は、Add メソッドを通じて別のクラスのリストに追加されます。次に、これらの MyClass オブジェクトは、リストを使用してクラスの foreach ループで列挙されます。何かのようなもの:

public DoStuffClass()
{
   private List<MyClass> myClasses;

   public void Add(MyClass myClass)
   {
      this.myClasses.Add(myClass);
   }

   public void DoStuff()
   {
      foreach (MyClass myClass in this.myClasses)
      {
         //Do stuff here.
      }
   }
}

奇妙な行動に気付きました。Other プロパティは正しく列挙されます。デバッグすると、リストにある各オブジェクトを通過して現在の値を取得することがわかります。ただし、Feature プロパティは常に、コレクション内の最後の MyClass オブジェクトの値を指しています。

他の誰かがこれに遭遇しましたか?

私が気付いていない奇妙なCOMのことが起こっていますか?

4

1 に答える 1

-1

ティム S. は問題の種類について正しかった。フィーチャーの作成をそのソースまでさかのぼって追跡する必要があり、データベースからフィーチャーを取得するために使用していた FeatureCursor クラスがフィーチャーをリサイクルするように設定されていることを発見しました。そのパラメーターを false に変更すると、正しく機能しました。

IFeatureCursor featureCursor = featureClass.Search(queryFilter, false);

2 番目のパラメーターはリサイクル用です。それが、目的の動作を実現するために false に設定したものです。

于 2013-05-10T20:42:12.813 に答える