假設我有一個將整數作爲參數的函數。我希望能夠使用枚舉列表來保持整數值的組織。將枚舉值傳遞給函數
例如,我非常希望能夠來定義這些(僞):
public enum days
{
monday,
tuesday,
etc...
}
public enum months
{
january,
february,
etc...
}
int doSomething(enum x)
{
return x + 1;
}
,然後能夠調用使用任何所列舉的名單像這樣的功能:
int a = doSomething(days.monday);
int y = doSomething(months.february);
這顯然不會按原樣工作,因爲doSomething需要使用其中一個枚舉(即日或月)來定義。我知道一些選擇。一個是簡單地轉換爲int:
int a = doSomething((int)days.monday);
int y = doSomething((int)months.february);
與此唯一的問題是,這個函數被調用我的代碼中的許多地方,和它的笨拙不得不一直把「(INT)」一切都結束了(首先將這些int值組合到枚舉中的主要動機之一是使代碼更易讀)。
另一種選擇是避免枚舉完全,而是捆綁值到一個容器類,是這樣的:
static class Days
{
static int x = 0;
static int monday = x++;
static int tuesday = x++;
}
同樣,這將工作,但似乎只是非常繁瑣時,我有很多這樣的容器類來定義。
答案很可能是沒有簡單的方法,而且我需要成爲一名成年人並接受這些選項之一。但是我認爲在做出承諾之前我會對此進行理智的檢查。有第三種選擇嗎?
WRT的System.DayOfWeek,我使用的月份和日期值只是一個例子。在真正的應用程序中,它們完全不相關的日子或時間。對於你顯示的代碼,DoSomething()函數只能在Days enum上運行。如果我嘗試提供不同的枚舉,它將失敗。 – Gadzooks34
@ Gadzooks34:我明白你的觀點。但不幸的是C#不支持枚舉的通用約束。請參閱我更新的帖子以獲取描述 – abatishchev