Какое исключение следует выбросить? - PullRequest
7 голосов
/ 28 февраля 2011

Я написал атрибут селектора метода настраиваемого действия, который имеет три свойства bool.Недопустимо, чтобы все три из них были false.По крайней мере, один из них должен быть true.Когда выполняется IsValidForRequest, я проверяю, что по крайней мере один из них true.Но если нет, то какое исключение я должен выбросить?

Какой-то соответствующий код:

public class MyCustomAttribute : ActionMethodSelectorAttribute
{
    public bool Prop1 { get; set; }
    public bool Prop2 { get; set; }
    public bool Prop3 { get; set; }

    public MyCustomAttribute()
    {
        this.Prop1 = true;
        this.Prop2 = true;
        this.Prop3 = true;
    }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        if (controllerContext == null)
        {
            throw new ArgumentNullException("controllerContext");
        }

        // at least one of them must be true
        if (!this.Prop1 && !this.Prop2 && !this.Prop3)
        {
            throw new ?????
        }

        // other codez here
    }
}

Атрибуты имеют такую ​​хорошую возможность инициализировать их, а также предоставлять значения свойств, поэтому я должен проверить ихв методе IsValidForRequest.

[MyCustom(Prop1 = false, Prop2 = false, Prop3 = false)]

Какое исключение следует выдать?

Ответы [ 3 ]

8 голосов
/ 28 февраля 2011

Я бы, вероятно, выбросил InvalidOperationException, потому что операция недопустима для текущего состояния объекта.

0 голосов
/ 28 февраля 2011

Создайте исключение с вашим конкретным настраиваемым сообщением, используя

throw new Exception("Custom Error Message");
0 голосов
/ 28 февраля 2011

Вы можете попробовать с ArgumentException , если эти свойства были загружены из пользовательского ввода ... или вы можете реализовать свое собственное пользовательское исключение , чтобы выбросить.

Это действительно зависит от того, как были установлены эти свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...