У меня есть следующий класс С# (упрощенный здесь):
internal static class Assertions {
public static void Assert(bool condition, string message = "Assertion failed") {
if (!condition) { throw new System.Exception(message); }
}
public static void NotNull(object o, string message = "Assertion failed") {
Assert(!Object.ReferenceEquals(o, null), message);
}
public static void EtCaetera(..., string message = "Assertion failed") {
Assert(..., message);
}
}
Как видите, у меня есть метод Assertions.Assert()
с необязательным параметром string message = "Assertion failed"
.
Когда я пишу оболочку вокруг этого метода, я бы хотел, чтобы у оболочки был параметр по умолчанию string message
, но я хотел бы избежать повторения значения по умолчанию ("Assertion failed"
), потому что это нарушает принцип DRY: если я хочу изменить сообщение "Assertion failed"
на "I crashed"
, мне придется изменить это значение по умолчанию во многих местах.
Как я могу передать «отсутствие» необязательного параметра? Я ищу что-то вроде:
public static void NotNull(object o, string message = Type.Missing) {
Assert(!Object.ReferenceEquals(o, null), message);
}
Другим вариантом было бы не использовать необязательные параметры и предоставить две версии каждого метода, но это быстро стало бы громоздким.
const
... ? - person Simon Whitehead   schedule 20.12.2013