实例化变量不包含任何值

时间:2018-05-02 08:38:11

标签: c# com ibm-pcomm

我有一个名为ClassModel的班级。这就是它的外观。

class ClassModel
{
    dynamic ConnListInstance;

    public ClassModel() {
        ConnListInstance = Activator.CreateInstance(Type.GetTypeFromProgID("PCOMM.autECLConnlist"));
    }

    public void checkCount() { //this shows a count of 0
        Console.WriteLine(ConnListInstance.Count());
    }

    public void checkCountVersionTwo() { //this shows a count of 1
        ConnListInstance = Activator.CreateInstance(Type.GetTypeFromProgID("PCOMM.autECLConnlist"));
        Console.WriteLine(ConnListInstance.Count());
    }
}

我通过声明ClassModel obj = new ClassModel()来实例化我的主页中的类。

但是当我尝试调用checkCount方法时,它返回0而不是1. checkCountVersionTwo返回1但只是因为我已经从构造函数中添加了实例化。

我创建构造函数和类的方式有问题吗?我可以知道它为什么返回null / empty值吗?在创建新的ConnListInstance对象时,变量ClassModel是否应该有值?

2 个答案:

答案 0 :(得分:1)

这与您的代码无关,但原因在于此对象的工作方式。

请阅读documentation

  

autECLConnList对象提供当前的静态快照   连接。该列表不会像连接那样动态更新   开始和停止。自动调用Refresh方法   构造autECLConnList对象。 如果使用的话   autECLConnList对象在构建之后,就是你的列表   连接是最新的。但是,您应该调用Refresh方法   autECLConnList对象在访问其他方法之前,如果有的话   自建设以来已经过去了一段时间,以确保您拥有最新的   数据。一旦你打电话给刷新,你可能会开始走过   集合

(强调我的)

所以解决方案是:

public void checkCount() 
{
    ConnListInstance.Refresh();
    Console.WriteLine(ConnListInstance.Count());
}

答案 1 :(得分:0)

这是完整的代码,没有任何其他操作吗?

广告,以下情况似乎如此。请添加进一步的代码以澄清。

  1. 在构造函数中,除非由于某种原因CreateInstance失败,否则您将拥有一个有效的实例

  2. 在第一种检查方法中,您将获得它所拥有的任何实体的数量(从施工时间到方法调用时间)。

  3. 在第二种检查方法中,您正在重新创建对象并再次在同一块中检索其计数。因此,将实体添加到列表的任何可能时间都在ConnListInstance的构造函数内。

  4. 因此,对于#2,您似乎正在操纵所包含的基础数据,因此列表计数报告为0;而在新建时,它被报告为1。