2013-05-10 41 views
0

我有一个类的最后一个对象,我们称之为MyClass的,有几个特性,其中之一是一个COM对象(从iFeature的ESRI的ArcObjects)。其他属性是标准的.NET对象。所以它看起来像这样:COM对象都指向于加入

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. 
     } 
    } 
} 

我注意到了奇怪的行为。其他属性正确枚举 - 当我调试时,我发现它通过列表中的每个对象并获取当前值。但Feature属性总是指向集合中最后一个MyClass对象的值。

有没有其他人遇到过吗?

有一些奇怪的事情COM回事,我是不知道的?

+0

显示调用'DoStuffClass.Add'的代码,并创建你的'MyClass'对象的代码(如果分开)。我怀疑你只是在一个错误的范围内有一个对象。 – 2013-05-10 17:12:28

+0

我在Add方法中做了一个测试,在这个方法中我检查了要添加的对象的Feature属性中的值,它们是正确的,所以我不认为这是问题。 – lintmouse 2013-05-10 17:14:49

+1

取决于你如何检查,这可能没有帮助。例如。 http://ideone.com/8I4oXR – 2013-05-10 17:21:45

回答

-1

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

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

第二个参数是回收。这就是我为了达到理想行为而设定的错误。