简化Enum及其相关值

时间:2013-01-18 04:31:24

标签: c# visual-studio-2010

我有一个值列表,我保持这样,

        public enum DisplayUnits
    {
        Vertical = 0,
        Horizontal = 1,
        Track = 2,
        Empty = 3,

    }
    public static string DisplayUnitsImage(DisplayUnits unit)
    {
        switch (unit)
        {
            case DisplayUnits.Vertical:
                return @"/image1";
            case DisplayUnits.Horizontal:
                return @"/image2";
            case DisplayUnits.Track:
                return @"/image3";
            case DisplayUnits.Empty:
                return @"/image4";
            default:
                return @"/image5";
        }

    }
    public static string DisplayUnitID(DisplayUnits unit)
    {
        switch (unit)
        {
            case DisplayUnits.Vertical:
                return @"1234";
            case DisplayUnits.Horizontal:
                return @"1235";
            case DisplayUnits.Track:
                return @"1236";
            case DisplayUnits.Empty:
                return @"1237";
            default:
                return @"1238";
        }
    }

为了检索图像路径,我将通过传递枚举来调用该方法 它可以用更简单的方式编写,因为添加一个值我需要在三个地方改变吗? 在这种情况下,建议使用元组?

2 个答案:

答案 0 :(得分:1)

让我完全改变我的回答。

一旦您说明您需要对所有可能的unitidimage进行硬编码,您可以将它们存储在代码中的数组中,如:

static string[] Images = 
{ 
    "/VerticalImage", 
    "/HorizontalImage", 
    "/TrackImage", 
    "/EmptyImage" 
}; //and so on...

正确的图像(或unitid)存储在与相关DisplayUnits int表示匹配的位置。

然后,您将能够使用所需的方法:

public static string DisplayUnitsImage(DisplayUnits unit)
{
    return string.Concat(Images[(int)unit], (int)unit);
}

因此,如果编辑DisplayUnits枚举,您需要编辑的唯一内容是

  1. 更改枚举本身
  2. 更改包含数据的每个数组(在此示例中为string[] Images
  3. 您无需编辑方法的主体(DisplayUnitsImageDisplayUnitID和其他方法(如果有)。

    甚至更容易。如果你的所有方法都工作方式类似,那就是简单地连接数据字段和单位表示,那么你可以有一个方法而不是所有方法:

    public static string DisplayUnitsData(string[] data, DisplayUnits unit)
    {
        return string.Concat(data[(int)unit], (int)unit);
    }
    

    并将相应的数组(如本例中的Images)作为data参数传递:

    string result = DisplayUnitsData(Images, DisplayUnits.Vertical);
    

答案 1 :(得分:1)

public static String DisplayUnitsImage(Int32 value)
{
    return @"/image" + value;
}

public static String DisplayUnitID(Int32 value)
{
    return "123" + value;
}