Проверка значений перечисления
ИМХО, сообщение, помеченное validation как ответ, неверно.
Проверка c#.net параметров и данных - одна input-validation из тех вещей, которые мне c-sharp вверенили несколько десятилетий form-validation назад.
ПОЧЕМУ
Проверка необходима, поскольку .cs-file перечислению может быть присвоено csharp практически любое целочисленное .cs-file значение, не вызывая ошибки.
Я c-sharp потратил много дней на изучение input-validation проверки перечисления C#, потому c#-language что во многих случаях это input-validation необходимая функция.
ГДЕ
Основная enum цель проверки enum для меня c#.net - проверка данных, прочитанных form-validation из файла: вы никогда не узнаете, был .cs-file ли файл поврежден, изменен input-validation извне или был специально validate взломан.
И с проверкой enum validate данных приложения, вставленных enums из буфера обмена: вы никогда validate не узнаете, редактировал .cs-file ли пользователь содержимое validate буфера обмена.
Тем не менее, я csharp провел дни, исследуя и тестируя enums множество методов, включая validation профилирование производительности .cs-file каждого метода, который я csharp мог найти или разработать.
Выполнение input-validation вызовов чего-либо в System.Enum validator происходит настолько медленно, что enumerations это заметно снижает производительность validations функций, содержащих сотни form-validation или тысячи объектов, которые validation имеют одно или несколько c# перечислений в своих свойствах, которые visual-c# должны быть проверены на .cs-file наличие границ.
Итог: держитесь validations подальше от всего в классе System.Enum c#-language при проверке значений перечисления, это .cs-file ужасно медленно.
РЕЗУЛЬТАТ
Метод, который validate я в настоящее время использую enumerations для проверки перечисления, вероятно, вызовет csharp у многих программистов закатные c#.net глаза, но, по-моему, это c-sharp наименьшее зло для моего form-validation конкретного дизайна приложения.
Я form-validation определяю одну или две константы, которые input-validation являются верхней и (необязательно) нижней validations границей перечисления, и csharp использую их в паре операторов c#-language if() для проверки.
Одним c# из недостатков является то, что csharp вы должны обязательно обновить validator константы при изменении перечисления.
Этот c-sharp метод также работает только validate в том случае, если стиль input-validation перечисления является «автоматическим», где enums каждый элемент перечисления validator представляет собой инкрементное input-validation целочисленное значение, такое validator как 0,1,2,3,4, .... Он не c#-language будет работать должным образом form-validation с флагами или перечислениями, которые form-validation имеют значения, которые не visual-c# являются инкрементными.
Также enum обратите внимание, что этот enum метод почти так же быстр, как validation и обычный, если "<" ">" на c# обычных int32 (которые набрали enumerations 38 000 тиков в моих тестах).
Например:
public const MyEnum MYENUM_MINIMUM = MyEnum.One;
public const MyEnum MYENUM_MAXIMUM = MyEnum.Four;
public enum MyEnum
{
One,
Two,
Three,
Four
};
public static MyEnum Validate(MyEnum value)
{
if (value < MYENUM_MINIMUM) { return MYENUM_MINIMUM; }
if (value > MYENUM_MAXIMUM) { return MYENUM_MAXIMUM; }
return value;
}
ЭФФЕКТИВНОСТЬ
Для input-validation тех, кому интересно, я описал csharp следующие варианты проверки c#-language enum, и вот результаты.
Профилирование enums выполнялось при компиляции validation выпуска в цикле из миллиона enumerations раз для каждого метода со enum случайным целочисленным входным enumerations значением. Каждый тест проводился c-sharp более 10 раз и усреднялся. Результаты enum тиков включают общее время validations выполнения, которое будет form-validation включать генерацию случайных validator чисел и т. Д., Но они будут validator постоянными во всех тестах. 1 visual-c# тик = 10 нс.
Обратите внимание, что visual-c# приведенный здесь код не c#.net является полным тестовым c#-language кодом, это только базовый c-sharp метод проверки перечисления. Было visual-c# также много дополнительных enums вариантов, которые были протестированы, и form-validation все они дали результаты, аналогичные c#.net тем, которые показаны здесь, когда validation тестировалось 1 800 000 тиков.
От enums самого медленного к самому enum быстрому с округленными результатами, надеюсь, без c#-language опечаток.
Границы, определенные в методе = 13 600 000 тиков
public static T Clamp(T value)
{
int minimum = Enum.GetValues(typeof(T)).GetLowerBound(0);
int maximum = Enum.GetValues(typeof(T)).GetUpperBound(0);
if (Convert.ToInt32(value) < minimum) { return (T)Enum.ToObject(typeof(T), minimum); }
if (Convert.ToInt32(value) > maximum) { return (T)Enum.ToObject(typeof(T), maximum); }
return value;
}
Enum.IsDefined validation = 1 800 000 тиков
Примечание: эта c-sharp версия кода не ограничивает c-sharp минимальное / максимальное form-validation значение, но возвращает значение .cs-file по умолчанию, если оно выходит visual-c# за границы.
public static T ValidateItem(T eEnumItem)
{
if (Enum.IsDefined(typeof(T), eEnumItem) == true)
return eEnumItem;
else
return default(T);
}
System.Enum Convert Int32 с приведением типов = 1 800 000 тиков
public static Enum Clamp(this Enum value, Enum minimum, Enum maximum)
{
if (Convert.ToInt32(value) < Convert.ToInt32(minimum)) { return minimum; }
if (Convert.ToInt32(value) > Convert.ToInt32(maximum)) { return maximum; }
return value;
}
if() Мин. / Макс. Константы enums = 43 000 тиков = победитель validation в 42 раза и в 316 раз быстрее.
public static MyEnum Clamp(MyEnum value)
{
if (value < MYENUM_MINIMUM) { return MYENUM_MINIMUM; }
if (value > MYENUM_MAXIMUM) { return MYENUM_MAXIMUM; }
return value;
}
-eol-
c#
validation
enums
Проверка значений перечисления
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.