Здравствуйте, я только начинаю погружаться в мир разработки, хотелось спросить совета, как можно улучшить следующий код:
JobKind jobKind = 0;
foreach (JobKind value in Enum.GetValues(typeof(JobKind)))
{
var enumIntValue = (int)value;
if (model.JobKinds.Contains(enumIntValue.ToString()))
{
var checkedSymbol = char.Parse(enumIntValue.ToString());
if ((model.JobKinds.LastIndexOf(checkedSymbol) - model.JobKinds.IndexOf(checkedSymbol)) == 0)
jobKind = jobKind | value;
}
}
JobKind
- это перечисление с атрибутом [Flags]
. На вход идет модель, которая содержит строковое поле - типы специальностей. Там идет перечисление. Для удобства, можно указать числами наборы специальностей (например, 2,4,5
). Цифры равны значению полей в перечислении. Данный код, формирует битовое поле и перечисления из строки. Я не нашел, как можно сконвертировать строку вида 2,4,5
в перечисление более элегантным способом, по этому хотелось бы спросить вашего совета по улучшению читаемости кода и т.д.
В данном случае лучше не проходиться по всем значениям перечисления, а организовать свертку строки.
Для этого нужно разбить ее по разделителю ,
, с помощью функции Split, а затем свернуть, например воспользовавшись методом Aggregate
var jobKind = model.JobKinds.Split(',')
.Aggregate((J)0, (acc, cur) =>
{
var value = (J)int.Parse(cur); // приводим элемент из строки в число, и затем в значение enum
return acc | value; // объединяем значения и возвращаем
});
Немного более компактно вызов Aggregate может выглядеть так:
.Aggregate((J)0, (acc, cur) => acc | (J)int.Parse(cur))
Фрилансер или Digital-агентство - Как сделать правильный выбор?
Есть 3 сущности - репетитор, студент, группа, все связаны друг с другом через многие ко многимРешил сделать так: объявляю статическую переменную...
Добрый день! Мне нужно вывести в DataGridView колонки с именами субъектов (класс Subject) из коллекции subjects, но при этом присвоить колонке в поле Tag идентификатор...
Как лучше всего организовать страничное представление данных в гриде? Примерно 10 000 строк
Исключение типа "SystemInvalidOperationException" возникло в EntityFramework