Получаването на максимална стойност от тип изброяване е често срещана задача, с която се сблъскват разработчиците. Това се изисква в сценарии, при които трябва да потвърдите въведеното от потребителя или да управлявате определени ресурси въз основа на стойността enum. C# предоставя лесен начин за постигане на това с помощта на класа Enum и малко LINQ.
Нека проучим решението, което прави извличането на максималната стойност на изброяване лесно като пай.
публичен enum MyEnum
{
Опция1 = 1,
Опция2 = 2,
Вариант 3 = 3
}
...
public int GetMaxEnumValue()
{
върне Enum.GetValues(typeof(MyEnum)).Cast().Макс();
}
Тази кратка част от кода върши цялата работа по извличане на най-високата стойност в enum. Но как работи?
Гмурнете се дълбоко в кода
`Enum.GetValues(typeof(MyEnum))` е първата важна част, която трябва да разберете. Този вграден .NET метод връща масив, съдържащ стойностите на константите в определено изброяване. Типът изброяване се предава като параметър на метода с помощта на ключовата дума `typeof`.
След като имаме масива, трябва да го преобразуваме в цели числа. Това се прави с помощта на .Cast(), който е част от LINQ (Language Integrated Query). LINQ е набор от техники и методи в .NET, който ни позволява да работим с данни по по-интуитивен и гъвкав начин.
След преобразуване на стойностите в цели числа, получаването на максималната стойност е толкова просто, колкото извикването на метода .Max(), друг чудесен инструмент, предоставен от LINQ. Този метод връща максималната стойност в колекция от int стойности.
Използване на Enum и LINQ библиотеки
Класът Enum е част от System namespace в .NET и предоставя няколко статични метода за работа с изброявания. Това е библиотеката, която трябва да използвате, когато трябва да извършите операция, свързана с типовете enum.
От друга страна, LINQ, част от пространството на имената System.Linq, е една от най-мощните функции на C#. Той предоставя различни методи за ефективно обработване на колекции, като получаване на максимални, минимални или средни стойности, сортиране и филтриране на данни.
Вижте повече