Я думаю, что все видели код вроде:
public void Server2ClientEnumConvert( ServerEnum server)
{
switch(server)
{
case ServerEnum.One:
return ClientEnum.ABC
//And so on.
Вместо этого зла мы могли бы сделать что-то вроде:
public enum ServerEnum
{
[Enum2Enum(ClientEnum.ABC)]
One,
}
Теперь мы можем использовать отражение, чтобы копировать ServerEnum и получать преобразования преобразования из самого объявления enum.
Проблема, с которой я столкнулся, заключается в объявлении атрибута Enum2Enum.
Это работает, но замена объекта o на Enum e - нет. Я не хочу иметь возможность передавать объекты конструктору, только другие перечисления.
public class EnumToEnumAttribute : Attribute
{
public EnumToEnumAttribute(object o){}
}
Это не скомпилируется.
public class EnumToEnumAttribute : Attribute
{
public EnumToEnumAttribute(Enum e){}
}
Есть ли причина ошибки компиляции? Как еще я мог бы передать информацию, необходимую для сопоставления, кроме:
EnumtoEnumAttribute(Type dest, string enumString)
Это кажется слишком многословным, но если это единственный способ, то, я думаю, я воспользуюсь им.