Созданная переменная не содержит никакого значения - PullRequest
0 голосов
/ 02 мая 2018

У меня есть класс с именем 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 ]

0 голосов
/ 02 мая 2018

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

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

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

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

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

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

0 голосов
/ 02 мая 2018

Это не имеет ничего общего с вашим кодом, но причина в том, как этот объект работает.

Пожалуйста, прочитайте документацию :

Объект autECLConnList предоставляет статический снимок текущего соединения. Список не обновляется динамически, так как соединения началось и остановилось. Метод Refresh вызывается автоматически построение объекта autECLConnList. Если вы используете Объект autECLConnList сразу после его создания, ваш список соединения текущие. Тем не менее, вы должны вызвать метод Refresh в объект autECLConnList перед доступом к другим его методам, если некоторые с момента его создания прошло время, чтобы убедиться, что у вас есть текущий данные. После того, как вы позвоните Обновить, вы можете начать ходить по коллекция

(акцент мой)

Итак, решение:

public void checkCount() 
{
    ConnListInstance.Refresh();
    Console.WriteLine(ConnListInstance.Count());
}
...