0

我将如何创建一个 C# 枚举来存储需要采用以下格式的数据?

假设我有一小部分项目,我想将它们存储在枚举中。我只看过下面的例子:

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(布尔值)

我将如何声明一个将存储项目的上述三个属性的枚举?

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

C# 与 Java 不同,枚举只能从数字类型(char、byte、long、int)继承。如果你想要更复杂的东西,我建议使用一个“重”类和一个枚举,如下所示:

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

枚举只允许一种类型,您是否尝试过使用结构?(http://msdn.microsoft.com/en-us/library/vstudio/ah19swz4.aspx

于 2013-08-01T12:55:38.610 回答
0

您可以创建布尔属性的枚举,如下所示

enum myThing : int {
item_Is_Multi_coloured= 0,
item_Is_Not_Multi_coloured= 1,
item_Is_Expensive = 2,
item_Is_Not_Expensive = 4,

}

但您不能在名称属性上创建枚举

所以看起来你想要一个来自你的项目对象的类

如果是这种情况,那么您可以这样做

class Item
{ 
string ItemName{get;set;}
bool IsMultiColoured{get;set;}
bool IsExpensive{get;set;} 
}

注:课程作者是 Tim Schmelter

于 2013-08-01T12:57:37.537 回答
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; }
    }
}

然后你就得到了s的稳定性enum,你可以用一种自然的方式来引用它们,例如Items.ItemA.Name

于 2013-08-01T13:01:13.417 回答