У нас есть некоторые вещи, которые можно экспортировать в различные форматы. В настоящее время у нас есть эти форматы, представленные перечислением, подобным этому:
[Flags]
public enum ExportFormat
{
None = 0x0,
Csv = 0x1,
Tsv = 0x2,
Excel = 0x4,
All = Excel | Csv | Tsv
}
Проблема в том, что они должны быть перечислены, и им также нужен перевод или описание в пользовательском интерфейсе. В настоящее время я решил эту проблему, создав два метода расширения. Они работают, но я не очень люблю их или решение вообще ... они чувствуют себя немного вонючим. Проблема в том, что я не знаю, как я мог бы сделать это лучше. У кого-нибудь есть хорошие альтернативы? Это два метода:
public static IEnumerable<ExportFormat> Formats(this ExportFormat exportFormats)
{
foreach (ExportFormat e in Enum.GetValues(typeof (ExportFormat)))
{
if (e == ExportFormat.None || e == ExportFormat.All)
continue;
if ((exportFormats & e) == e)
yield return e;
}
}
public static string Describe(this ExportFormat e)
{
var r = new List<string>();
if ((e & ExportFormat.Csv) == ExportFormat.Csv)
r.Add("Comma Separated Values");
if ((e & ExportFormat.Tsv) == ExportFormat.Tsv)
r.Add("Tab Separated Values");
if ((e & ExportFormat.Excel) == ExportFormat.Excel)
r.Add("Microsoft Excel 2007");
return r.Join(", ");
}
Может быть, это способ сделать это, но я чувствую, что должны быть лучшие способы сделать это. Как я могу рефакторинг это?