2013-10-24 3 views
0

Я хочу, чтобы мой класс enum имел пару имя-значение. Мне нужно указать enum в моем xsd.Укажите значение для элемента перечисления в xsd

Например: В настоящее время у меня есть XSD, как

<xsd:simpleType name="ColorCode"> 
     <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="Red"/> 
     <xsd:enumeration value="Orange"/> 
     <xsd:enumeration value="LightGreen"/> 
     <xsd:enumeration value="DarkGreen"/> 
     <xsd:enumeration value="LightBlue"/> 
     <xsd:enumeration value="DarkBlue"/> 
     <xsd:enumeration value="DarkGrey"/> 
     <xsd:enumeration value="LightGrey"/> 
     </xsd:restriction> 
    </xsd:simpleType> 

Сгенерированный код:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] 
    [System.SerializableAttribute()] 
    public enum ColorCode { 

     /// <remarks/> 
     Red, 

     /// <remarks/> 
     Orange, 

     /// <remarks/> 
     LightGreen, 

     /// <remarks/> 
     DarkGreen, 

     /// <remarks/> 
     LightBlue, 

     /// <remarks/> 
     DarkBlue, 

     /// <remarks/> 
     DarkGrey, 

     /// <remarks/> 
     LightGrey, 
    } 

Как определить мой XSD так, что сгенерированный код является то, как показано ниже:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")] 
    [System.SerializableAttribute()] 
    public enum ColorCode { 

     /// <remarks/> 
     Red = 0x12, 

     /// <remarks/> 
     Orange = 0x13, 

     /// <remarks/> 
     LightGreen = 0x17, 

     /// <remarks/> 
     DarkGreen=0x20, 

     /// <remarks/> 
     LightBlue=0x40, 

     /// <remarks/> 
     DarkBlue=0x50, 

     /// <remarks/> 
     DarkGrey0x90, 

     /// <remarks/> 
     LightGrey=0x190, 
    } 

ответ

0

некоторое время назад я столкнулся с той же проблемой, но не смог найти ответ. поэтому я закончил работу таким образом:

private static readonly int[][] _conversion = 
     { 
      new[] {(int) ColorCode.Red, 0x12}, 
      new[] {(int) ColorCode.Orange, 0x13}, 
      new[] {(int) ColorCode.LightGreen, 0x17}, 
      ..... 
     }; 

    static int ToValue(ColorCode color) 
    { 
     if (_conversion.Any(c => c[0] == (int) color)) 
      return _conversion.First(c => c[0] == (int) color)[1]; 

     throw new NotImplementedException(string.Format("Color conversion is not in the dictionary! ({0})", color)); 
    } 

    static ColorCode ToEnum(int value) 
    { 
     if (_conversion.Any(c => c[1] == value)) 
      return (ColorCode)_conversion.First(c => c[1] == value)[0]; 

     throw new NotImplementedException(string.Format("Value conversion is not in the dictionary! ({0})", value)); 
    } 

    static void Main(string[] args) 
    { 
     Console.WriteLine(ToEnum(0x13)); 
     Console.WriteLine(ToValue(ColorCode.Red)); 
    } 
Смежные вопросы