1

我有一个像这样维护的价值观列表,

        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";
        }
    }

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

4

2 回答 2

1

让我彻底改变我的答案。

一旦您声明需要对所有可能unitid的 s 和images 进行硬编码,您可以将它们存储到代码中的数组中,例如:

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在本例中)

您无需编辑方法的主体(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);
于 2013-01-18T04:38:33.643 回答
1
public static String DisplayUnitsImage(Int32 value)
{
    return @"/image" + value;
}

public static String DisplayUnitID(Int32 value)
{
    return "123" + value;
}
于 2013-01-18T04:41:31.833 回答