Я согласен с Анджей. Исключение должно быть выброшено в «set», потому что свойство НИКОГДА не должно быть установлено на недопустимое значение, и вам необходимо «захватить контекст, когда было установлено недопустимое значение»
Я использую один из классов ArgumentException, потому что "под капотом" "set" - это вызов автоматически созданного метода с именем 'CLASSNAME'.set_'PROPERTYNAME' (значение)
Например
class MyClass
{
string name;
public string Name {
get {
return name;
}
set {
if (value==null) {
throw new ArgumentNullException("value", "The value of the property Name cannot be set to null.");
}
name = value;
}
}
}
Внутренне это создает два метода
public string get_Name()
и
public void set_Name(string value)
Если вы отображаете трассировку стека, это то место, откуда будет выброшено исключение.
Именно поэтому я всегда включаю в сообщение текст типа «Значение свойства Name ...», чтобы пользователь свойства мог видеть, где было сгенерировано исключение, поскольку не будет метода с именем set_SOMEPROPERTY (значение SOMETYPE ) видна пользователю библиотеки классов.
(кроме того, это то, что вы должны делать в соответствии с «Руководствами по проектированию NET Framework 4 для исключений, отлова и выброса стандартных исключений ( Здесь )»
Примерно на полпути вниз по странице в разделе «ArgumentException, ArgumentNullException и ArgumentOutOfRangeException» говорится «Использовать значение для имени параметра неявного значения установщиков свойств»)