Я использую флаги enum в проекте, над которым я работаю, и много XML-сериализации. Я хотел бы иметь возможность назначить несколько различных флагов перечисления для одного параметра перечисления. Проблема, с которой я сталкиваюсь, заключается в том, что значения будут назначаться только один раз, в то время как я хочу иметь возможность назначать несколько перечислений.
У меня есть рабочее решение, использующее строки и массив:
[XmlElement("AddTags")]
public string[] AddTags
{
set
{
if (value != null)
foreach (string tag in value)
{
if (tag.Contains(","))
{
string[] split = tag.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string str in split)
Tags = (Tags | (int)EnumUtil.GetIndex<Tag>(str));
}
else
Tags = (Tags | (int)EnumUtil.GetIndex<Tag>(tag));
}
}
get
{
return EnumUtil.GetNamesInTag<Tag>(Tags).ToArray();
}
}
Что дает мне желаемый результат, за исключением того, что я бы предпочел просто использовать сериализованное перечисление. XML для этого будет выглядеть так:
<AddTags>Tag1</AddTags>
<AddTags>Tag2</AddTags>
И все должны быть установлены в одно целое, содержащее каждый из перечисленных флагов.
В идеале это будет работать с тем же XML:
[Flags]
public enum Tag
{
Tag1 = 1 << 00,
Tag2 = 1 << 01,
Tag3 = 1 << 02,
}
public int Tags;
public Tag AddTags
{
set
{
Tags = (Tags | (int)value);
}
get
{
return (Tag)Tags;
}
}
К сожалению, xml назначит AddTags только один раз, независимо от того, сколько раз AddTags больше не является массивом. Я хотел бы иметь возможность присвоить это значение несколько раз, используя один и тот же XML, и без создания массива, так как я чувствую, что это слишком сложно. Спасибо.