0

我有一堂课叫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 只是因为我从构造函数中添加了实例化。

我创建构造函数和类的方式有问题吗?我可以知道为什么它返回一个空/空值吗?ConnListInstance创建新ClassModel对象时变量不应该有值吗?

4

2 回答 2

1

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

请阅读文档

autECLConnList 对象提供当前连接的静态快照。该列表不会随着连接的启动和停止而动态更新。在构造 autECLConnList 对象时会自动调用 Refresh 方法。如果您在构建后立即使用 autECLConnList 对象,则您的连接列表是最新的。但是,如果自构造以来已经过了一段时间,您应该在访问其其他方法之前调用 autECLConnList 对象中的 Refresh 方法,以确保您拥有当前数据。调用 Refresh 后,您就可以开始浏览该集合了

(强调我的)

所以解决方案是:

public void checkCount() 
{
    ConnListInstance.Refresh();
    Console.WriteLine(ConnListInstance.Count());
}
于 2018-05-02T09:03:18.753 回答
0

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

根据这个广告,以下似乎是这样。请添加更多代码以澄清。

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

  2. 在第一种检查方法中,您将获得它持有的任何实体的计数(从构造时间到方法调用时间)。

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

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

于 2018-05-02T09:09:52.007 回答