2013-09-24 68 views
0

我有一些狀態值的枚舉:枚舉,默認鑄件圖片(C#)

public enum Status 
{ 
    New = 0, 
    Dropped = 1, 
    Approved = 2 
} 

是否有可能使一個默認的鑄造這樣一個枚舉?默認的投射,可以將每個狀態轉換爲特定的圖像而不需要顯式轉換?

謝謝。

+3

你在這裏指的是什麼'Image'類型?如果這是你自己的班級,你可以*添加一個隱式轉換,但我個人不會。 –

回答

2

爲什麼不能製作一本詞典?

public class StatusHelper 
{ 
    private Dictionary<Status, Image> _map; 

    public StatusHelper() 
    { 
     _map = new Dictionary<Status, Image>() 
         { 
          {Status.New, new Image()}, 
          {Status.Dropped, new Image()}, 
          {Status.Approved, new Image()}, 
         }; 
    } 

    public Image GetImageForStatus(Status status) 
    { 
     return _map[status]; 
    } 
} 

爲什麼這樣呢?那麼因爲你可以注入你的映射IoC(example here

因此,這成爲;

public StatusHelper(Dictionary<Status, Image> injectedMap) 
{ 
    _map = injectedMap; 
} 

和地方在你的應用程序,你建立一個綁定(未測試,只是一個例子)

Bind<Dictionary<Status, Image>>() 
    .ToConstant(new Dictionary<Status, Image>() 
        { 
         {Status.New, new Image()}, 
         {Status.Dropped, new Image()}, 
         {Status.Approved, new Image()}, 
        }) 
    .WhenInjectedInto<StatusHelper>(); 

現在你是助手是無視你做出狀況的任何變化或它的圖像

+0

「因爲你可以注入你的映射與IoC」兩個問題:1)爲什麼這是件好事? 2)這些圖像可能來自文件,資源或URL,可以配置_if_ _needed_。也許他們從數據庫或文件加載,並且可以修改_if_ _needed_。爲什麼IoC會比這些情況下的替代方案更好? –

+0

那麼,離手可以說我有一個由10個應用程序使用的單個庫...我可以改變每個應用程序的庫類的行爲,因爲我正在注入他們需要的信息。即對於不同應用程序的這些Status枚舉,我可以有不同的圖像,而不會改變任何類 –