2011-10-04 75 views
7

我有2個枚舉C# - 轉換一個枚舉到其他

public enum PersonTitle{ 
    Mr=0,Ms=1,Mrs=2 
} 

public enum SystemPersonTitles{ 
    Mr=0,Ms=1,Mrs=2 
} 

如何轉換一個到其他(無開關的情況下或if語句)

public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){ 
//here 
} 
//usage 
SystemPersonTitles systemPersonTitles = TellWhatYouAre(PersonTitle.Ms); 
+2

這些值是相同的,所以你可以投它 – harold

回答

10
SystemPersonTitles newValue = (SystemPersonTitles)(int)PersonTitle.Mr; 

在腦海中,我無法測試這個,因爲我目前在我的OSX上。

+6

這會工作,但是int cast是多餘的 –

0

喜歡的東西(SystemPersonTitles)(INT)personTitle

8

枚舉只是榮耀整數,所以你可以簡單地從一個轉換爲另一個問題:

public SystemPersonTitles TellWhatYouAre(PersonTitle personTitle) 
{ 
    return (SystemPersonTitles)personTitle; 
} 

注意,這個轉換是基於int值,而不是名稱。

3

將其轉換爲int,然後返回到其他Enum。

public void SystemPersonTitles TellWhatYouAre(PersonTitle personTitle){ 
    int value = (int)personTitle; 
    var systemPersonTitle = (SystemPersonTitles)value; 
} 

也可直接進行,因爲其他人指出,但我想是明確的顯示機制解決後面。

SystemPersonTitles systemPersonTitle = (SystemPersonTitles)personTitle; 
3

由於兩者基本上都是int類型,所以你可以投它。

所以,如果你有一個名爲titlePersonTitle一個實例,你可以這樣做:如果你想通過值將它們轉換

SystemPersonTitles newTitle = (SystemPersonTitles)title; 
2

,您可以使用此:

(SystemPersonTitles)PersonTitle.Mr; 

如果您想要通過名稱來轉換它們,您可以使用以下代碼:

public bool TryConvertToSystemPersonTitles(
    PersonTitle personTitle, out SystemPersonTitles result) 
{ 
    return Enum.TryParse(personTitle.ToString(), out result); 
} 
+0

@dtb:我寫了它,然後改變了一種不同的方式。 :o猜猜我遺留了雜亂的代碼。 –

1

您可以這樣做:

PersonTitle person = PersonTitle.Mr; 

SystemPersonTitles system = (int) person; 

這將根據int值進行轉換。

如果你想通過名稱來做到這一點,這樣做:

PersonTitle person = PersonTitle.Mr; 

SystemPersonTitles sys = (SystemPersonTitles)Enum.Parse(person.GetType(), person.ToString()); 
1

有做它沒有直接的方法,這是正確的方式。讓說,你可以這樣做:

personTitle = systemPersonTitle; 

會發生什麼你的代碼,如果SystemPersonTitles將改變那些中的任何一個:

public enum SystemPersonTitles1{ 
    Mr=1,Ms=2,Mrs=3 
} 

public enum SystemPersonTitles2{ 
    Mr=0,Ms=1,Mrs=2,UnKnown=3 
} 

public enum SystemPersonTitles3{ 
    Mrs=0,Ms=1,Mr=2 
} 

或其他任何改變人們可能會想到的。
確定你可以繞過這個限制,但這只是糟糕的編程。如果您選擇使用它們的「int」值並且失去枚舉能力。只需使用「int」開始...