2013-09-24 67 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枚举,我可以有不同的图像,而不会改变任何类 –