2010-10-09 107 views
1

我正在處理這個項目,並且我有大量的「服務」要執行。我需要擁有此服務代碼,以便我可以根據所選服務的代碼驗證並做出決定。定義「動態」枚舉

我正在定義這個枚舉並從web.config中獲取它的值,以便我可以輕鬆地更改它們。

public enum ServiceCodes 
{ 
    Transfer= Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"]), 
    ChangePlate= Convert.ToInt32(ConfigurationManager.AppSettings["servChangePlate"]) 
} 

但我得到這個錯誤:表達式必須是常量。 (因轉換)

我該怎麼辦? (或者你可以建議我完全不同的方法。)

回答

2

先走一步,這樣定義一個靜態類:

public static class ServiceCodes 
{ 
    readonly static int Transfer = Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"]) 
    //... 
} 
2

documentation指出,枚舉值是恆定的。另一種方法是使用static readonly成員申報班級。

如果您仍然需要通過枚舉提供的類型安全,你可以使用一個稍微複雜的方法:

public class ServiceCodes { 

    public static readonly ServiceCodes Transfer = new ServiceCodes(Convert.ToInt32(ConfigurationManager.AppSettings["servTransfer"])); 
    public static readonly ServiceCodes ChangePlate = new ServiceCodes(Convert.ToInt32(ConfigurationManager.AppSettings["servChangePlate"])); 

    internal int Code {get; private set;} 

    private ServiceCodes(int code) { 
     Code = code; 
    } 
} 

然後,像一個方法:

public void SomeAction(ServiceCodes serviceCode) { 
    //.... 
} 

可以被稱爲是這樣的:

SomeAction(ServiceCodes.Transfer); 

但是,考慮到複雜性(與收益相比),我會選擇第一種方法H。