我有一个名为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
是否应该有值?
答案 0 :(得分:1)
这与您的代码无关,但原因在于此对象的工作方式。
请阅读documentation:
autECLConnList对象提供当前的静态快照 连接。该列表不会像连接那样动态更新 开始和停止。自动调用Refresh方法 构造autECLConnList对象。 如果使用的话 autECLConnList对象在构建之后,就是你的列表 连接是最新的。但是,您应该调用Refresh方法 autECLConnList对象在访问其他方法之前,如果有的话 自建设以来已经过去了一段时间,以确保您拥有最新的 数据。一旦你打电话给刷新,你可能会开始走过 集合
(强调我的)
所以解决方案是:
public void checkCount()
{
ConnListInstance.Refresh();
Console.WriteLine(ConnListInstance.Count());
}
答案 1 :(得分:0)
这是完整的代码,没有任何其他操作吗?
广告,以下情况似乎如此。请添加进一步的代码以澄清。
在构造函数中,除非由于某种原因CreateInstance失败,否则您将拥有一个有效的实例
在第一种检查方法中,您将获得它所拥有的任何实体的数量(从施工时间到方法调用时间)。
在第二种检查方法中,您正在重新创建对象并再次在同一块中检索其计数。因此,将实体添加到列表的任何可能时间都在ConnListInstance的构造函数内。
因此,对于#2,您似乎正在操纵所包含的基础数据,因此列表计数报告为0;而在新建时,它被报告为1。