Обычно я обнаружил, что у меня есть нулевая ошибка ссылки, вызванная тем, что я забыл инициализировать свойство коллекции в классе. Есть ли способ сделать это автоматически без использования конструктора.можно инициализировать свойство коллекции, когда мы объявляем его в классе
ответ
private List<string> _names = new List<string>();
public List<string> Names
{
get {return _names;}
set {_names = value;}
}
Если вы хотите использовать
public List<string> Names { get; set; }
непосредственно, я понятия не имею, за исключением использования конструктора.
Один из способов:
List<string> myList = new List<string>();
public class Foo {
List<int> list = new List<int>();
// details elided
}
Теперь list
никогда не null
, когда любой из ваших методов экземпляра выполняются.
Его спросили без конструктора, поэтому я думаю, что ответ отрицательный. Я рисую, что он, возможно, ищет способ, которым вы (неточно) воспринимаете класс C++, объявленный в стеке против кучи, - то, как вы обрабатываете переменную в стеке дает иллюзию, что конструктор не вызывается, когда вы смотрите на него синтаксически на языки, которые не имеют указателей и ссылок на объекты.
Я новичок в инъекции зависимостей, и поэтому я уверен, но, возможно, что-то можно было бы сделать таким образом, эффективно автоувеличивая все ваши коллекции?
Редактировать: но действительно - почему? Напишите несколько модульных тестов, чтобы утверждать, что нет нулей или чего-то еще. Забытие на создание переменных-членов поражает меня как очень низкое из-за того, что мне нужно сделать для меня и именно так, как я хочу. Тотем
Тонкая вариация, которая препятствует построению списков, полезна для некоторых сценариев, связанных с WCF (который пропускает как конструктор и инициализаторов полей) без необходимости десериализации обратных вызовов:
public class MyType
{
private List<string> items;
public List<string> Items { get {
return items ?? (items = new List<string>()); } }
}
- 1. Объявляем массив и инициализировать его отдельно
- 2. Мы объявляем 'jQuery или мы просто используем его?
- 3. Может ли мы объявляем запечатан метод в классе
- 4. Почему мы объявляем статическую переменную в классе & определении вне класса?
- 5. Что происходит в памяти, когда мы объявляем делегата в C#?
- 6. Когда мы объявляем CLASS внутри INTERFACE в java?
- 7. Что происходит, когда мы объявляем Array (4) в JavaScript?
- 8. Можно ли инициализировать класс в другом классе?
- 9. Как можно инициализировать объект в своем классе?
- 10. Что действительно делает компилятор, когда мы объявляем статические переменные?
- 11. Как мы объявляем провода (межсоединения в цифровой цепи), когда мы хотим использовать их в всегда блоке?
- 12. Инициализировать свойство базового класса в базе vs в производном классе
- 13. Почему мы всегда объявляем константы силой 2?
- 14. Почему мы объявляем метод как статический
- 15. Как инициализировать свойство коллекции в пользовательском элементе управления WPF
- 16. Инициализировать статические указатели в классе
- 17. Как инициализировать свойство массива в классе в ASP classic?
- 18. Можно ли загрузить навигационное свойство коллекции объектов?
- 19. Уведомлять в производном классе, когда свойство изменилось в базовом классе
- 20. Почему свойство коллекции можно изменить без установки?
- 21. инициализировать вектор в классе
- 22. Инициализировать протокол в классе
- 23. иногда мы объявляем «и» впереди функции в классе на основе кодирования
- 24. Как объявить, но не инициализировать свойство в классе Swift
- 25. Можно назвать свойство индексатора?
- 26. Инициализировать свойство Attributes объекта WebControl с помощью инициализатора коллекции
- 27. Зачем нам нужен конструктор по умолчанию, когда мы можем инициализировать элементы данных в java?
- 28. Почему мы объявляем @page = Page.new под новым действием, в Rails?
- 29. Когда не будет инициализировано свойство навигации коллекции?
- 30. инициализировать вектор в классе, передавая его размер в качестве аргумента
Я думаю OP хотел это сделать автоматически компилятором. –
@ icyrock.com, Спасибо, я знаю это, и, как я покажу, компилятор НЕ сделает это. – Gabe