2014-02-18 63 views
-2

如何通過使用enum成員來調用期望int值的方法。我不想讓被調用的方法必須知道枚舉。將enum成員傳遞給方法

public enum Volume : int 
{ 
    Low = 1, 
    Medium = 2, 
    High = 3 
} 

public void Start() { 
    DoSomeWork(Volume.Low); //this complains 
    //this works DoSomething((int)Volume.Low); 

} 

public void DoSomeWork(int vol) { 
    //Do something 
} 
+4

你自己在問題中有答案。爲什麼要問這個問題?說了這樣的話,你會更好的方法接受枚舉。讓它接受一個魔法int將會使那個需要記住int意味着什麼的調用者非常困惑。 – Servy

回答

3

投它明確地int(因爲你已經想通了):

DoSomeWork((int)Volume.Low) 

從枚舉的基礎類型隱式轉換是被禁止的,因爲有很多的情況下,當這種轉換不合理。 @EricLippert對此足以解釋得很好here

但是,如果你不使用它,爲什麼要引入枚舉?如果程序中的體積速率由枚舉指定 - 那麼這是您的方法應該預期的參數類型。

+0

是的,但id不是。編譯器不知道Volume.Low的類型是int,特別是因爲我設置了枚舉的基類型? – bitshift

+0

@bitshift,請參閱更新和一些解釋 – Andrei

+0

好吧,現在我查了一下,enum成員和一個int可能是相同的intregal類型,他們需要明確的轉換從一個到另一個。 http://csharp-station.com/Tutorial/CSharp/Lesson17 – bitshift

1

這樣稱呼它:

DoSomeWork((int) Volume.Low); 
0

爲什麼不採用這種方式:

public void DoSomeWork(Volume volume) { 
    //Do something 
} 
0

如文檔指出

Every enumeration type has an underlying type, which can be any integral type except char. The default underlying type of the enumeration elements is int.

所以你可以簡單的將它轉換成int並將其傳遞給該方法。

DoSomeWork((int)Volume.Low);