2013-07-26 82 views
2

我有兩個具有確切類型屬性但具有不同屬性名稱的類。所以我想將每個屬性複製到駐留在不同類中的相應屬性。將enum屬性從一個類複製到另一個類

例如

public class ClassOne 
{ 
    public string Name {get; set;} 
    public string Code {get; set;} 
    public UserMode Mode {get; set;} 
    public enum UserMode {A=1, B=2, C=3}; 
} 

public class ClassTwo 
{ 
    public string MyName {get; set;} 
    public string MyCode {get; set;} 
    public MyUserMode Mode {get; set;} 
    public enum MyUserMode MyMode {AA=1, BB=2, CC=3}; 
} 

因爲在我的腦海這只是交我創建輔助方法,轉換ClassOne要ClassTwo採取的每一個成員,並複製它的價值就像

public static ClassTwo(ClassOne one) 
{ 
    var two = new ClassTwo() 
    { 
    MyName = one.Name, 
    MyCode = one.Code, 
    // how to copy enum value ?? 
    }; 
} 

的問題是:我怎麼能複製枚舉像我以上做的名稱和代碼?

感謝

+1

剛一說明:上面的代碼將無法編譯..產品名稱,代碼, MyName,MyCode不指定任何數據類型。 – Ahmed

+0

它仍然不會編譯,因爲'Name'和'Code'不是'ClassTwo'的一部分。你的意思是'MyName = Name;'和'MyCode = Code'? – Default

回答

9

只需將其轉換爲int,然後到新的枚舉:

public static ClassTwo(ClassOne one) 
{ 
    var two = new ClassTwo() 
    { 
    Name = one.Name, 
    Code = one.Code, 
    Mode = (ClassTwo.MyUserMode)((int)one.Mode); 
    }; 
} 

這是假設兩個枚舉有確切相同int值。

一個更安全的方式做到這一點將使用Enum.IsDefined

public static ClassTwo(ClassOne one) 
{ 
    var mode = (ClassTwo.MyUserMode)((int)one.Mode); 
    if (!Enum.IsDefined(typeof(ClassTwo.MyUserMode), mode) 
    throw new InvalidOperationException("Cannot map enums."); 
    var two = new ClassTwo() 
    { 
    Name = one.Name, 
    Code = one.Code, 
    Mode = mode 
    }; 
} 
+0

拋出一些[Enum.IsDefined](http://msdn.microsoft.com/library/system.enum.isdefined.aspx)檢查只是爲了確保和那應該是。 – Corak

+0

@Corak忘記了這一點,謝謝! –

+1

您不需要首先強制轉換爲int;你可以這樣做:'var mode =(ClassTwo.MyUserMode)one.Mode;' –

1

你可以施放值爲int

MyMode = (MyUserMode)((int)one.UserMode) 
相關問題