Это несколько упрощенный пример (я изменил его, чтобы скрыть реальный код).
У меня есть приложение на основе базы данных и небольшой инструмент, который разрабатывается отдельно и предназначен для работы с приложением. Существует таблица, которая определяет перечисление, но оно может со временем измениться. Предположим, какое-то приложение (медицинское?) Необходимо для точного отслеживания пола человека.
select * from sex order by id;
id | mnemonic | description
0 | U | Unknown sex
1 | M | Male
2 | F | Female
3 | T | Trans-gender
И мой C# enum
:
public enum SexType
{
/// <summary>Unknown sex.</summary>
[Description("U")]
Unknown = 0,
/// <summary>Male sex.</summary>
[Description("M")]
Male = 1,
/// <summary>Female sex.</summary>
[Description("F")]
Female = 2
/// <summary>Trans-gender sex.</summary>
[Description("T")]
TransGender = 3,
}
Здесь я не должен предполагать, что id является непрерывной последовательностью; и эти флаги перечислений не могут быть объединены, даже если это выглядит так.
Некоторая логика сделана на SQL; некоторые сделаны в C#
коде. Например, у меня может быть функция:
// Here we get id for some record from the database.
public static void IsMaleOrFemale(int sexId)
{
if (!Enum.IsDefined(typeof(SexType), sexId))
{
string message = String.Format("There is no sex type with id {0}.",
sexId);
throw new ArgumentException(message, "sexId");
}
var sexType = (SexType) sexId;
return sexType == SexType.Male || sexType == SexType.Female;
}
Это может работать довольно хорошо, пока не изменятся ни таблица, ни определения enum. Но стол мог. Я не могу полагаться на столбец id или мнемонический столбец, поддерживающий их значения. Я думаю, что лучшее, что я могу сделать, - это провести модульный тест, который гарантирует, что таблица синхронизируется с моим определением перечисления. Я пытаюсь сопоставить значение id и атрибут description с мнемоническим столбцом.
Итак, как мне получить список всех пар (программно, в C#
): (0, "U"), (1, "M"), (2, "F"), (3, "T")
, посмотрев на enum SexType
?
Идея состоит в том, чтобы сравнить этот упорядоченный список с select id, mnemonic from sex order by is asc;
.