列表中的COM对象都指向添加的最后一个对象

时间:2013-05-10 17:10:42

标签: c# .net list com

我有一个类,我们称之为MyClass,它有几个属性,其中一个属性是COM对象(来自ESRI ArcObjects的IFeature)。其他属性是标准.NET对象。所以它看起来像这样:

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

这个人通过Add方法被添加到另一个类的列表中。然后,使用列表在类的foreach循环中枚举这些MyClass对象。类似的东西:

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事情正在发生,我不知道?

1 个答案:

答案 0 :(得分:-1)

蒂姆S.对于问题的类型是正确的。我必须将功能的创建追溯到其源代码,并发现我用来从数据库中检索功能的FeatureCursor类被设置为回收功能。一旦我将该参数更改为false,它就能正常工作。

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

第二个参数用于回收。这就是我设置为false以实现所期望的行为。