none
В коллекциях Null равно Count=0 RRS feed

  • Вопрос

  • Добрый вечер.

    WPF C# (версию не знаю наверное 5)

    Сравнение ObservableCollection==null

    И сравнение ObservableCollection.Count == 0

    Это равнозначно?

    Или по другому может ли коллекция быть не Null при Count равным 0.

    Как пример вдруг я удалю все Item из коллекции станет ли она Null?

    Спасибо

    23 августа 2016 г. 13:42

Ответы

  • Добрый день!

    Абсолютно неравнозначно.

    В первом случае проверяется создан ли экземпляр коллекции, а во втором количество элементов в уже созданном экземпляре.

    Коллекция может быть не Null при Count равным 0. Например:

    var collection = new ObservableCollection<int>(); //создаем экземпляр
    if (collection == null) { //тут будет false
    }
    if (collection.Count == 0) { //тут будет true
    }

    Коллекция не станет Null при удалении всех Item-ов.


    • Изменено Pavel Dorovsky 23 августа 2016 г. 14:15
    • Помечено в качестве ответа DevingAs 23 августа 2016 г. 14:24
    23 августа 2016 г. 14:11

Все ответы

  • Добрый день!

    Абсолютно неравнозначно.

    В первом случае проверяется создан ли экземпляр коллекции, а во втором количество элементов в уже созданном экземпляре.

    Коллекция может быть не Null при Count равным 0. Например:

    var collection = new ObservableCollection<int>(); //создаем экземпляр
    if (collection == null) { //тут будет false
    }
    if (collection.Count == 0) { //тут будет true
    }

    Коллекция не станет Null при удалении всех Item-ов.


    • Изменено Pavel Dorovsky 23 августа 2016 г. 14:15
    • Помечено в качестве ответа DevingAs 23 августа 2016 г. 14:24
    23 августа 2016 г. 14:11
  • Добрый день,

    Нет это не тоже самое null указывает на то что ссылка не указывает на какой либо обьект в памяти. Не инецаилизированная сылка тоже null. Для примера

    ObservableCollection<object> data; тогда data== null результат будет true  и если вы попробуете применить операцию точки  data.Count то вы получите System.NullReferenceException так как вы пытались разыменовать указателя на null. Ну а если data.Count == 0 то это уже значит что data != null и ваша ссылка указывает на обьект в памяти  тоесть у вае есть пустая коллекци а не null

    ObservableCollection<object> data1 = new ObservableCollection<object>(); то  data1.Count==0

    ObservableCollection<object> data2 = new ObservableCollection<object>("1","2","3"); 

    data2.Count==3;

    data2.Clear() ;

    data2 != null;

    data2.Count==0; При удалении вех элементов у вас бутед пустая коллекция а не null. Она не будет null до тех пор пока вы сами явно не присвоете ей null или это сделает уборщик мусора чтобы не получить исключения при подсчете количества используйте следующий ко

     if (data1 != null && data1.Count == x) ;
    или 
    if (data1?.Count == x) ;


    Make the community better together


    • Изменено Azat Tazayan 23 августа 2016 г. 14:27
    23 августа 2016 г. 14:25