0

以下の形式にする必要があるデータを格納する C# Enum を作成するにはどうすればよいですか?

アイテムの小さなリストがあり、それらを Enum に格納したいとします。以下のような例しか見たことがありません。

enum myThing : int {
    None = 0,
    Read = 1,
    Write = 2,
    Modify = 4,
    Delete = 8
    Create = 16,
    All = Read | Write | Modify | Delete | Create
}

私が保存する必要があるのは次のようなものです:

  • アイテム名 (文字列)
  • Item_Is_Multi_coloured (ブール値)
  • Item_Is_Expensive (ブール値)

アイテムの上記の 3 つの属性を格納する列挙型を宣言するにはどうすればよいですか?

4

5 に答える 5

4

列挙型内に String を格納することはできません。クラスを宣言する必要があります。

  // The simplest MyItem version
  public class MyItem {
    public String Name {get; set}
    public Boolean Is_Multi_coloured {get; set}
    public Boolean Is_Expensive {get; set}
  }

列挙型に詰め込める唯一のオプションは、item_Is_Multi_coloured と item_Is_Expensive です。

  [Flags()]
  public enum MyItemKind {
    None = 0,
    Is_Multi_coloured = 1,
    Is_Expensive = 2 
  } 

したがって、変更されたクラス MyItem は次のようになります

  // MyItem with enum (the simplest version)
  public class MyItem {
    public String Name {get; set}
    public MyItemKind Kind {get; set}
  }
于 2013-08-01T12:53:30.043 に答える
1

Java とは異なり、C# は、数値型 (char、byte、long、int) からのみ継承された列挙型を持つことができます。もっと複雑なものが必要な場合は、次のように 1 つの「重い」クラスと 1 つの列挙型を使用することをお勧めします。

public enum MyThingSimple : int {
  Enum1 = 0,
  Enum2 = 1
}

public sealed class MyThingComplex {
  public string Name { get; private set; }
  public bool IsMultiColoured { get; private set; }
  public bool IsExpensive { get; set; }
  public MyThingSimple Value { get; private set; }

  public static readonly MyThingComplex Enum1 = new MyThingComplex {
    IsExpensive = false,
    IsMultiColoured = true,
    Value = MyThingSimple.Enum1,
    Name = "Enum1"
  };
  public static readonly MyThingComplex Enum2 = new MyThingComplex {
    IsExpensive = false,
    IsMultiColoured = true,
    Value = MyThingSimple.Enum2,
    Name = "Enum2"
  };
  private static readonly Dictionary<MyThingSimple, MyThingComplex> m_Mapping = 
    new Dictionary<MyThingSimple,MyThingComplex> {
      { MyThingSimple.Enum1, Enum1 },
      { MyThingSimple.Enum2, Enum2 }
  };

  public static MyThingComplex FromSimple(MyThingSimple simpleThing) {
    return m_Mapping[simpleThing];
  }
}
于 2013-08-01T12:55:58.923 に答える
0

クラスと、定義済みのクラスオブジェクトを返すプロパティを持つ別の静的コンテナークラスを使用することをお勧めします。

class Item
{
    readonly bool IsMulticolored;
    readonly bool IsExpensive;
    readonly string Name;

    Item(string Name, bool IsMulticolored, bool IsExpensive)
    {
        me.Name = Name;
        me.IsMulticolored = IsMulticolored;
        me.IsExpensive = IsExpensive;
    }
}

static class Items
{
    const _itemA = new Item("thing", true, true);

    static Item ItemA
    {
        get{ return _itemA; }
    }
}

次に、enums の安定性を取得し、自然な方法でそれらを参照できます。Items.ItemA.Name

于 2013-08-01T13:01:13.417 に答える
0

列挙型は 1 つの型のみを許可します。構造体を使用してみましたか? ( http://msdn.microsoft.com/en-us/library/vstudio/ah19swz4.aspx )

于 2013-08-01T12:55:38.610 に答える