Создайте метод или список, который не может получить нулевые аргументы
У меня есть node
класс, который в основном состоит из parent
собственность и список детей. Там есть AddChild
метод, который не должен принимать значение NULL в качестве аргумента. Пользователи не должны добавлять нулевого ребенка.
Но parent
свойство должно разрешать нулевые значения (корневой узел имеет нулевого родителя).
Вопрос "Как запретить пользователям добавлять нулевых детей при compile-time
?". Я знаю, что мог бы добавить NullArgumentException
, но это не то, что мне нужно.
Другой способ - создать список, который не принимает нулевые элементы (время компиляции).
Код:
class Node
{
public Node Parent { get; set; }
private List<Node> Children = new List<Node>();
public void AddChild<Maybe a generics solution?>(Node???? Child) where ????
{
//I don't want to add (if Child == null) Throw new ArgumentNullException();
Children.Add(Child);
}
}
2 ответа
Это "недостаток" дизайна языка C#. Есть способ сделать тип значения (struct T
быть обнуляемымNullable<T>
) но нет способа указать ссылочный тип аргумента не должен быть нулевым. Лучшее, что вы можете сделать, это проверить на ноль и бросить ArgumentNullException
(или используйте контракты кода, как предлагает pnewhook).
См. Ответ MailmanOdd для ссылки на сообщение в блоге Эрика Липперта на эту тему.
Вы не можете запретить нулевые аргументы. Лучшее, что вы можете сделать, это вызвать ошибку, когда нарушено предварительное условие аргумента. Так как вы не хотите бросать ArgumentNullException
если child равен null, я бы порекомендовал кодовые контракты.
Contract.Requires( x != null );
Это немного более кратко, и вы получаете дополнительную возможность статической проверки во время сборки, если ваше предварительное условие нарушено.