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

画像パスを取得するには、列挙型を渡してメソッドを呼び出します。
1 つの値を追加するには、3 つの場所を変更する必要があるため、より簡単に記述できますか?
このコンテキストでは、タプルの使用が推奨されますか?

4

2 に答える 2

1

私の答えを完全に変えさせてください。

unitid可能なすべての s とsをハードコードする必要があると述べたらすぐに、次imageのようにコード内の配列に格納することができます。

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この例では)

DisplayUnitsImageメソッドの本体 ( 、DisplayUnitID、およびその他がある場合)を編集する必要はありません。

またはさらに簡単です。すべてのメソッドが同様に機能する場合、つまりデータ フィールドと単位表現を単純に連結する場合は、すべてのメソッドではなく 1 つのメソッドを使用できます。

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 に答える