为了账号安全,请及时绑定邮箱和手机立即绑定

实例化变量不包含任何值

实例化变量不包含任何值

C#
呼如林 2021-05-18 17:14:35
我有一堂课叫做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对象时变量不应该有值吗?
查看完整描述

2 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

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

请阅读文档

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

(强调我的)

因此,解决方案是:


public void checkCount() 

{

    ConnListInstance.Refresh();

    Console.WriteLine(ConnListInstance.Count());

}


查看完整回答
反对 回复 2021-05-23
?
慕神8447489

TA贡献1780条经验 获得超1个赞

这是完整的代码,无需在任何地方进行任何其他操作?

按照这种方式投放广告,以下情况似乎是这样。请添加更多代码以进行澄清。

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

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

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

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


查看完整回答
反对 回复 2021-05-23
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信