Созданная переменная не содержит никакого значения
У меня есть класс под названием 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 ответа
Это не имеет ничего общего с вашим кодом, но причина в том, как этот объект работает.
Пожалуйста, прочитайте документацию:
Объект autECLConnList предоставляет статический снимок текущих подключений. Список не обновляется динамически, так как соединения запускаются и останавливаются. Метод Refresh автоматически вызывается при создании объекта autECLConnList. Если вы используете объект autECLConnList сразу после его создания, ваш список соединений будет текущим. Однако вам следует вызвать метод Refresh в объекте autECLConnList, прежде чем обращаться к другим его методам, если с момента его создания прошло некоторое время, чтобы убедиться, что у вас есть текущие данные. После того как вы позвонили Обновить, вы можете начать ходить по коллекции
(акцент мой)
Итак, решение таково:
public void checkCount()
{
ConnListInstance.Refresh();
Console.WriteLine(ConnListInstance.Count());
}
Это полный код без каких-либо других манипуляций?
Объявление согласно этому, следующее кажется случаем. Пожалуйста, добавьте дополнительный код, чтобы уточнить.
В конструкторе у вас будет действительный экземпляр, если по какой-то причине не произойдет сбой CreateInstance
В 1-м методе проверки вы получите счет того объекта, который он содержит (от времени создания до времени вызова метода).
Во втором методе проверки вы воссоздаете объект и снова получаете его счет в том же блоке. Таким образом, любое возможное время для добавления сущностей в список находится в конструкторе ConnListInstance.
Следовательно, для #2 кажется, что вы манипулируете лежащими в основе данными, и, следовательно, счетчик списка отображается как 0; в то время как во время нового строительства это сообщается как 1.