Если вы используете Code Contracts и хотите публично выставить свойство HasAttributeModel
, я рекомендую
Contract.Requires(this.HasAttributeModel);
В противном случае, вы должны сгенерировать пользовательское исключение, которое происходит от InvalidOperationException
здесь. Метод, который вы пытаетесь выполнить, недопустим, учитывая текущее состояние объекта. Из документации:
Исключение, которое выдается, когда вызов метода недопустим для текущего состояния объекта.
В вашем пользовательском сообщении должно быть указано, что экземпляр AttributeModel
равен null
.
Более широкий вопрос: почему вы позволяете своим экземплярам находиться в состоянии, когда для них может быть вызван метод, когда объект находится в недопустимом состоянии? Вы должны избегать этого, если можете. Например, почему GetAttributes
не проверяет, что context.AttributeModel
не null
? Вы могли бы иметь
Contract.Requires(context.AttributeModel != null);
в качестве предварительного условия для этого метода. Однако здесь есть некоторая опасность, заключающаяся в том, что если кто-то сохранит действующую ссылку на ссылку параметра context
, он может разрушить состояние, поскольку вы сохраняете ссылку через закрытую переменную _context
. Помните об этом и избегайте этого, если можете.