C# проверка входных параметров

Не лишняя ли здесь проверка enum параметра? (UserRole - enum-объект). И вообще нужна ли проверка на enum типы во входных параметрах?! Спасибо за внимание!

    public User(string firstname, string lastname, UserRole role)
    {
        if(firstname == null)
            throw new ArgumentNullException("Ошибка имени.", nameof(firstname));
        if(lastname == null)
            throw new ArgumentNullException("Ошибка фамилии.", nameof(lastname));
        if (!Enum.IsDefined(typeof(UserRole), role))
            throw new ArgumentNullException("Ошибка роли.", nameof(role));

        FirstName = firstname;
        LastName = lastname;
        Position = role;
    }

Ответы (1 шт):

Автор решения: return

Всё зависит от контекста. Если ваш enum допускает кастомные значения и используется просто как набор констант, то проверка лишняя. Зачастую это флаги.

Если же у вас есть, например, такой enum:

[Flags]
public enum BufferAccess
{
    None = 0x0,
    Read = 0x1,
    Write = 0x2,
    ReadWrite = Read | Write // or `Both`
}

…то тут следует делать проверку. Лично я использую вот такой метод:

BufferAccessMethods.cs

public static class BufferAccessMethods
{
    public static bool Validate(this BufferAccess @this)
    {
        const BufferAccess max = BufferAccess.ReadWrite;

        if (@this < 0 || @this > max) return false;

        return true;
    }
}

Использование

void Do(BufferAccess access)
{
    if (!access.Validate())
        throw new ArgumentException("Invalid buffer access", nameof(access));

    ⋮
}
→ Ссылка