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

170
18 апреля 2022, 15:50

Не лишняя ли здесь проверка 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;
    }
Answer 1

Всё зависит от контекста. Если ваш 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));
    ⋮
}
READ ALSO
Не могу запустить службу WCF ASP.NET

Не могу запустить службу WCF ASP.NET

Создал пустой apsnet проект

126
Создание транзакции FireBase с помощью Xamarin

Создание транзакции FireBase с помощью Xamarin

Необходимо просто поле count постоянно добавлять +1, как я понимаю если я сделаю так:

277
Сравнение двух дат в C#

Сравнение двух дат в C#

Мне нужно сравнить две даты(DateTime) и узнать является их разница больше X днейЯ понимаю что тут дело в логике, но я не могу сам написать эту функцию

149
Как обрезать после 3ей запятой?

Как обрезать после 3ей запятой?

Есть текст - showAcabado(this, 'http:', 'BLACK', '', '')

131