Tag: enums

扩展枚举,矫枉过正?

我有一个对象需要序列化为EDI格式。 对于这个例子,我们会说它是一辆汽车。 汽车可能不是b / c选项随时间变化的最佳示例,但对于真实对象,Enums永远不会改变。 我有许多枚举,如下所示应用了自定义属性。 public enum RoofStyle { [DisplayText(“Glass Top”)] [StringValue(“GTR”)] Glass, [DisplayText(“Convertible Soft Top”)] [StringValue(“CST”)] ConvertibleSoft, [DisplayText(“Hard Top”)] [StringValue(“HT “)] HardTop, [DisplayText(“Targa Top”)] [StringValue(“TT “)] Targa, } 通过扩展方法访问属性: public static string GetStringValue(this Enum value) { // Get the type Type type = value.GetType(); // Get fieldinfo for this type FieldInfo fieldInfo = […]

获取Enum 值描述

我有我的enumHelper类包含这些: public static IList GetValues() { IList list = new List(); foreach (object value in Enum.GetValues(typeof(T))) { list.Add((T)value); } return list; } 和 public static string Description(Enum value) { Attribute DescAttribute = LMIGHelper.GetAttribute(value, typeof(DescriptionAttribute)); if (DescAttribute == null) return value.ToString(); else return ((DescriptionAttribute)DescAttribute).Description; } 我的枚举是这样的: public enum OutputType { File, [Description(“Data Table”)] DataTable } 到现在为止还挺好。 […]

如何在C#中为字符串分配字符串而不是整数值?

我正在尝试为枚举分配一个字符串。 像下面的例子: enum MyEnum { frist = “First Value”, second = “Second Value”, third = “Third Value” } 所以我可以在我的代码中有这样的东西: MyEnum enumVar = MyEnum.first; … string enumValue = EnumVar.ToString();//returns “First Value” 以传统的方式,当我创建一个枚举时,ToString()将返回枚举名称而不是其值。所以这是不可取的,因为我正在寻找一种方法来分配一个字符串值,然后从枚举中获取该字符串值。

如何将表示C#枚举值的字符串国际化?

我已经看到很多关于将字符串映射到枚举的问题和答案,反之亦然,但是如何将一系列本地化字符串映射到枚举? 我应该只创建一个这样的扩展方法 ,从资源文件中返回正确的字符串吗? 有没有办法本地化这样的解决方案中使用的属性(如“描述”)? 哪个是首选解决方案 – 扩展方法或属性。 在我看来,这不是属性的预期目的。 事实上,现在我考虑一下,如果我使用扩展方法,属性似乎是我用来在资源文件中为我想要用来代替枚举值的本地化字符串指定一个键。 编辑 – 示例: 鉴于以下枚举, public enum TransactionTypes { Cheque = 1, BankTransfer = 2, CreditCard = 3 } 我想要一种方法将每种类型映射到本地化的字符串。 我开始使用枚举的扩展方法,该方法使用switch语句和对资源文件的强类型引用。 但是,每个枚举的扩展方法似乎不是一个很好的解决方案。 我已经开始关注此操作 ,为每个枚举值创建一个自定义属性。 该属性具有包含本地化字符串的资源文件的基本名称和密钥。 例如,在上面的枚举中,我有: … [EnumResourceAttribute(“FinancialTransaction”, “Cheque”)] Cheque = 1, … 其中“FinanacialTransaction”是resx文件,“Check”是字符串键。 我正在尝试创建一个实用工具方法,我可以从任何枚举中传递任何值,并让它返回该值的本地化字符串表示forms,假设指定了自定义属性。 我无法弄清楚如何动态访问资源文件及其中的密钥。

枚举字符串值并按值查找枚举

我希望有一个类似下面的枚举,然后有一个类似于Util.FindFruitByValue(“A”)的方法返回枚举Apple。 这是因为缩写存储在数据库中,我需要在从db读取后将它们转换为适当的枚举。 这是可能的还是我需要为它创建一个单独的类? 请告诉我。 提前致谢。 public enum Fruit { Apple = “A” Banana = “B” Cherry = “C” } 更新:这就像一个查找表,但区别在于值是字符串而不是int。 我通过读取数据库中的值来填充业务对象,我想使用具有固定值的类型而不是字符串。

MVC5:Enum单选按钮,标签为displayname

我有这些枚举 public enum QuestionStart { [Display(Name=”Repeat till common match is found”)] RepeatTillCommonIsFound, [Display(Name=”Repeat once”)] RepeatOnce, [Display(Name=”No repeat”)] NoRepeat } public enum QuestionEnd { [Display(Name=”Cancel Invitation”)] CancelInvitation, [Display(Name=”Plan with participants on first available common date”)] FirstAvailableCommon, [Display(Name=”Plan with participants on my first available common date”)] YourFirstAvailableCommon } 我有一个帮助类来显示枚举中每个字段的所有单选按钮 @model Enum @foreach (var value in Enum.GetValues(Model.GetType())) { […]

找出枚举是否设置了“标志”属性

使用reflection,如何确定枚举是否具有Flags属性 所以对于MyColor返回true [Flags] public enum MyColor { Yellow = 1, Green = 2, Red = 4, Blue = 8 } 并为MyTrade返回false public enum MyTrade { Stock = 1, Floor = 2, Net = 4, }

解析为Nullable Enum

我试图将字符串解析回MyEnum类型的可空属性。 public MyEnum? MyEnumProperty { get; set; } 我在线收到错误: Enum result = Enum.Parse(t, “One”) as Enum; // Type provided must be an Enum. Parameter name: enumType 我在下面有一个示例控制台测试。 如果我在属性MyEntity.MyEnumProperty上删除nullable,则代码有效。 除了通过reflection之外,如何在不知道typeOf枚举的情况下使代码工作? static void Main(string[] args) { MyEntity e = new MyEntity(); Type type = e.GetType(); PropertyInfo myEnumPropertyInfo = type.GetProperty(“MyEnumProperty”); Type t = myEnumPropertyInfo.PropertyType; Enum result = Enum.Parse(t, […]

传入枚举作为方法参数

我宣布了一个枚举: public enum SupportedPermissions { basic, repository, both } 我也有像这样的POCO: public class File { public string Id { get; set; } public string Name { get; set; } public string Description { get; set; } public SupportedPermissions SupportedPermissions { get; set; } } 现在我想创建一个方法,我可以用它来创建一个新的File对象: public string CreateFile(string id, string name, string description, Enum supportedPermissions) { […]

为什么枚举有两个不同的名称具有相同的数值?

我刚刚发现了一个微妙的错误,我有一个枚举,两个名字无意中共享相同的数值(在这种情况下,红色= 10和深红色= 10)。 我有点惊讶这不是语法错误。 public enum Colour { Red=10, Blue=11, Green=12, Crimson=10 } // Debug.Write(Colour.Red==Colour.Crimson) outputs True 是否有任何现实世界的理由为什么这种行为可能有用或者认为它应该是语法错误?