Созданная переменная не содержит никакого значения

У меня есть класс под названием 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());
}

Это полный код без каких-либо других манипуляций?

Объявление согласно этому, следующее кажется случаем. Пожалуйста, добавьте дополнительный код, чтобы уточнить.

  1. В конструкторе у вас будет действительный экземпляр, если по какой-то причине не произойдет сбой CreateInstance

  2. В 1-м методе проверки вы получите счет того объекта, который он содержит (от времени создания до времени вызова метода).

  3. Во втором методе проверки вы воссоздаете объект и снова получаете его счет в том же блоке. Таким образом, любое возможное время для добавления сущностей в список находится в конструкторе ConnListInstance.

Следовательно, для #2 кажется, что вы манипулируете лежащими в основе данными, и, следовательно, счетчик списка отображается как 0; в то время как во время нового строительства это сообщается как 1.

Другие вопросы по тегам