实例化变量不包含任何值

我有一堂课叫做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对象时变量不应该有值吗?


呼如林
浏览 114回答 2
2回答

泛舟湖上清波郎朗

这与您的代码无关,但是原因在于该对象的工作方式。请阅读文档:autECLConnList对象提供当前连接的静态快照。随着连接的启动和停止,该列表不会动态更新。在构造autECLConnList对象时会自动调用Refresh方法。如果在构造完后立即使用autECLConnList对象,则连接列表为当前连接。但是,如果自构造其以来已经过去了一段时间以确保您拥有当前数据,则应在访问其其他方法之前在autECLConnList对象中调用Refresh方法。致电Refresh之后,您就可以开始浏览收藏了(强调我的)因此,解决方案是:public void checkCount() {    ConnListInstance.Refresh();    Console.WriteLine(ConnListInstance.Count());}

慕神8447489

这是完整的代码,无需在任何地方进行任何其他操作?按照这种方式投放广告,以下情况似乎是这样。请添加更多代码以进行澄清。在构造函数中,您将有一个有效的实例,除非CreateInstance由于某种原因而失败在第一种检查方法中,您将获得其拥有的任何实体的计数(从构造时间到方法调用时间)。在第二种检查方法中,您将重新创建对象,然后再次在同一块中检索它的计数。因此,将实体添加到列表的任何可能时间都在ConnListInstance的构造函数中。因此,对于#2,似乎您正在操纵包含的基础数据,因此列表计数报告为0;而在重新施工时,报告为1。
打开App,查看更多内容
随时随地看视频慕课网APP