Winforms 在C中使用枚举#

Winforms 在C中使用枚举#,winforms,c#-4.0,enums,Winforms,C# 4.0,Enums,如何创建C#Enum来存储需要采用以下格式的数据 假设我有一个小的项目列表,我想将它们存储在一个枚举中。 我只看到了如下示例: enum myThing : int { None = 0, Read = 1, Write = 2, Modify = 4, Delete = 8 Create = 16, All = Read | Write | Modify | Delete | Create } 我需要存储的内容如下: 项目名称(字符串

如何创建C#Enum来存储需要采用以下格式的数据

假设我有一个小的项目列表,我想将它们存储在一个枚举中。 我只看到了如下示例:

enum myThing : int {
    None = 0,
    Read = 1,
    Write = 2,
    Modify = 4,
    Delete = 8
    Create = 16,
    All = Read | Write | Modify | Delete | Create
}
我需要存储的内容如下:

  • 项目名称(字符串)
  • 项目为多色(布尔值)
  • 商品价格昂贵(布尔值)

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

如果不能在枚举中存储字符串,则应声明一个类:

  // 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_是多色的,item_是昂贵的:

  [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}
  }

不能在枚举中存储字符串,应声明一个类:

  // 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_是多色的,item_是昂贵的:

  [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}
  }

枚举只允许一种类型,是否尝试使用结构?()

枚举只允许一种类型,您是否尝试过使用结构?()

C#与Java不同,enum只能从数字类型(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];
  }
}
公共枚举神话简单:int{
枚举1=0,
枚举2=1
}
公共密封类神秘建筑群{
公共字符串名称{get;private set;}
公共布尔是多色的{get;private set;}
公共布尔是昂贵的{get;set;}
公共神话简单值{get;private set;}
public static readonly MyThingComplex Enum1=新的MyThingComplex{
IsExpensive=false,
IsMultiColor=true,
值=MyThingSimple.Enum1,
Name=“Enum1”
};
公共静态只读MyThingComplex Enum2=新MyThingComplex{
IsExpensive=false,
IsMultiColor=true,
值=MyThingSimple.Enum2,
Name=“Enum2”
};
专用静态只读字典m_映射=
新词典{
{MyThingSimple.Enum1,Enum1},
{MyThingSimple.Enum2,Enum2}
};
公共静态MyThingComplex FromSimple(MyThingSimple simpleThing){
返回m_映射[simpleThing];
}
}
C#与Java不同,enum只能从数字类型(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];
  }
}
公共枚举神话简单:int{
枚举1=0,
枚举2=1
}
公共密封类神秘建筑群{
公共字符串名称{get;private set;}
公共布尔是多色的{get;private set;}
公共布尔是昂贵的{get;set;}
公共神话简单值{get;private set;}
public static readonly MyThingComplex Enum1=新的MyThingComplex{
IsExpensive=false,
IsMultiColor=true,
值=MyThingSimple.Enum1,
Name=“Enum1”
};
公共静态只读MyThingComplex Enum2=新MyThingComplex{
IsExpensive=false,
IsMultiColor=true,
值=MyThingSimple.Enum2,
Name=“Enum2”
};
专用静态只读字典m_映射=
新词典{
{MyThingSimple.Enum1,Enum1},
{MyThingSimple.Enum2,Enum2}
};
公共静态MyThingComplex FromSimple(MyThingSimple simpleThing){
返回m_映射[simpleThing];
}
}

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

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

}
但无法在name属性上创建枚举

因此,看起来您希望从item对象中获得一个类

如果是这样的话,你可以这样做

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

注意:类作者是Tim Schmelter

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

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

}
但无法在name属性上创建枚举

因此,看起来您希望从item对象中获得一个类

如果是这样的话,你可以这样做

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

注意:类作者是Tim Schmelter

我建议只使用一个类和另一个静态容器类,其属性返回您定义的类对象,例如

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

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

我建议只使用一个类和另一个静态容器类以及返回您定义的类对象的属性,例如

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

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

它被称为一个类,例如:
class Item{string ItemName{get;set;}bool是多色的{get;set;}bool是昂贵的{get;set;}
那么您所说的每个枚举对应于3条数据?为什么您认为枚举应该在这里?就我所见,你可以为Item_是多色的x Item_是昂贵的,比如{NONE=0,Item_是昂贵的=1,Item_是多色的=2,ALL=Item_是昂贵的{124; Item_是多色的}。并将其包装到一个类中,其中还包含一个ITEM_名称。@j.i.h.是。这就是所谓的类,例如:
类项{string ItemName{get;set;}bool是多色的{get;set;}bool是昂贵的{get;set;}}
所以你说的每个枚举对应于3个数据段?为什么你认为枚举应该在这里?就我所见,你可以为Item_是多色的x Item_是昂贵的,比如{NONE=0,Item_是昂贵的=1,Item_是多色的=2,ALL=Item_是昂贵的{124; Item_是多色的}。并将其包装到一个类中,其中还包含一个ITEM_名称。@j.i.h.是。啊,快10秒:)+1的提议,一个简单的类-1对于MyItemKind枚举的建议,尽管-多色、昂贵的项目刚刚消失…@Tom Tom:对不起,-1如果没有[Flags]属性,那么将是值得的,但是由于MyItemKind使用[FlagsAttribute]声明,您可以设置MyItemKind.Is_multi_Color | MyItemKind.Is_昂贵的费用