Не лишняя ли здесь проверка 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;
}
Всё зависит от контекста. Если ваш 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));
⋮
}
Сборка персонального компьютера от Artline: умный выбор для современных пользователей