2010-03-18 4 views
0

j'ai un ENUMaffaires ENUM à la conversion DatContract Enum dans WCF

namespace Business 
{ 
    public enum Color 
    { 
     Red,Green,Blue 
    } 
} 


namespace DataContract 
{ 
    [DataContract] 
    public enum Color 
    { 
     [EnumMember] 
     Red, 
     [EnumMember] 
     Green, 
     [EnumMember] 
     Blue 
    } 
} 

J'ai le même ENUM en tant que DataContract dans WCF avec les mêmes valeurs. J'ai besoin de convertir l'énumération Business vers l'enum DataContract en utilisant un traducteur.

Hoe puis-je y parvenir?

Répondre

2

Si vous connaissez les deux types au moment où vous devez faire la conversion, vous pouvez faire quelque chose comme:

Business.Color bc = Business.Color.Red; 
DataContract.Color dcc = (DataContract.Color)Enum.Parse(typeof(DataContract.Color), bc.ToString()) 
0

Vous pouvez utiliser quelque chose comme ci-dessous:

public static class ColorTranslator 
{ 
    public static Business.Color TranslateColor(DataContract.Color from) 
    { 
     Business.Color to = new Business.Color(); 
     to.Red = from.Red; 
     to.Green = from.Green; 
     to.Blue = from.Blue; 

     return to; 
    } 

    public static DataContract.Color TranslateColor(Business.Color from) 
    { 
     DataContract.Color to = new DataContract.Color(); 
     to.Red = from.Red; 
     to.Green = from.Green; 
     to.Blue = from.Blue; 

     return to; 
    } 
} 
1

Ci-dessous, un plus élégant style comme le code du cadre.

public static class Enum<T> where T : struct 
{ 
    public static T Parse(string value) 
    { 
     return (T)Enum.Parse(typeof(T), value); 
    } 

    public static T Convert<U>(U value) where U : struct 
    { 
     if (!value.GetType().IsInstanceOfType(typeof(Enum))) 
      throw new ArgsValidationException("value"); 

     var name = Enum.GetName(typeof (U), value); 
     return Parse(name); 
    } 
} 

//enum declaration 
...  
public void Main() 
{ 
    //Usage example 
    var p = Enum<DataContract.Priority>.Convert(myEntity.Priority); 
} 

Et voilà!