有没有一种简单的方法可以将c#枚举转换为字符串,然后再转换回来?
我需要将枚举值列表转换为一个字符串以存储在我的数据库中;然后从数据库中检索时再次转换. 每个枚举的价值当前是一个简单的整数,因此创建一个额外的表来处理此问题感到有些夸张. 因此,在下面的示例中,如果用户选择母亲,父亲和姐妹,则数据库中存储的值将为" 0,1,3" public enum MyEnum { Mother = 0, Father = 1, Gran = 2, Sister = 3, Brother = 4 } 我是C#的新手,所以不确定是否有一种很好的开箱即用方法 - 当Google狩猎时我找不到任何明显的东西! 提前欢呼:) -L 解决方案 根据要求,通过" 0,1,3"在枚举值数组之间来回转换: MyEnum[] selection = { MyEnum.Mother, MyEnum.Father, MyEnum.Sister };
0 2024-04-21
编程技术问答社区
从阵列中生成瓦片图
我一直在考虑尝试创建一个RPG游戏,一个带有运动的简单游戏,捡起物品和打开门. 我已经考虑了很长时间的瓷砖地图引擎,但是我找不到任何可行的东西:/ 基本上我要完成的工作是我有一个enum,例如: public enum tileSort { Dirt, Grass, Stone, Empty } 并且当引擎穿过数组时(将具有0,1等)时,我正在考虑开关语句,类似于: switch(tileSort) { case '0': tileList.Add(Content.Load("Tiles/grass")) } 问题在于我不知道如何使它成为可能,我所能创建的只是一种引擎,它可以根据您首先加载到游戏中的哪些内容来运行并生成. 我知道这很困惑,因为我不擅长解释自己. 预先感谢. 解决方案 您可以使用一些工具来帮助您: 我确定您可以找到许多其他. 关于您编写​​的代码片段,您不想致电 Co
0 2024-04-21
编程技术问答社区
UWP-绑定枚举的区别
我遇到了一个非常有趣的问题. 假设您在UWP应用中具有以下XAML页面内容: 并且在页面的代码中包含以下属性: public ApplicationDataLocality ApplicationDataLocalityEnum { get; } = ApplicationDataLocality.Local; public FontStyle FontStyleEnum { get; } = FontStyle.Normal; 预期结果是,该应用将显示"本地"和"正常". 实际结果如下: 背后的原因是什么?我对此很好奇,但是即使我尝试挖掘
0 2024-04-21
编程技术问答社区
C# 标记的枚举:如何附加值
所以,我有一个标记的枚举: [Flags] public enum EmailResult { ISPUSuccess = 1, STSSuccess = 2 } 我想做的是通过孔子将枚举var设置为一个,另一个或两者. 如, If (ISPU){ Result = EmailResult.ISPUSuccess } If (STS){ Result += EmailResult.STSSuccess } 喜欢添加..所以有效地是 Result = EmailResult.ISPUSuccess | EmailResult.STSSuccess 解决方案 您使用[Flags] public enum EmailResult { None = 0, ISPUSuccess = 1, STSSuccess = 2 } EmailResult result = EmailResult
0 2024-04-21
编程技术问答社区
如何让一个枚举在它的每个条目上存储额外信息?
我有一组有信息的项目.这些项目是由我,程序员定义的,并且用户永远不需要更改它们,它们永远不需要根据配置进行更改,而它们唯一可能更改的时间是我应用程序的未来版本.我以前知道应该有多少个项目,以及它们的确切数据是多少. 枚举,是一个很棒的编程结构,可以让我预先定义我的应用程序中可用的一组密钥,并以逻辑类型进行分组. 我现在需要的是一种构造,让我预先定义一组钥匙,这些密钥附有附有额外信息的键. 示例: 这是标准枚举: public enum PossibleKeys { Key1, Key2, Key3 } 这是我需要的枚举: public enum PossibleItems { Item1 { Name = "My first item", Description = "The first of my possible items." }, Item2 {
0 2024-04-21
编程技术问答社区
为什么我不应该在标志枚举中使用0?
可能的重复: 枚举是否应该以0或1? 为什么我永远不要在标志枚举中使用0?我现在已经阅读了多次,想 知道原因:) 解决方案 为什么我永远不要在标志枚举中使用0? 这个问题是基于错误的假设.您应该始终 在标志枚举中使用零.它应该始终将其表示为"无". 除了表示"没有旗帜"之外,您绝不应该将其用于其他任何东西. 为什么不呢? ,如果零具有"无"的含义,它确实会令人困惑.一个合理的期望((e & E.X) == E.X)意味着" x标志集吗?"但是,如果x为零,那么此表达式将始终是正确的,即使逻辑上 flag不是"设置". 其他解决方案 因为标志枚举是位集合或选项集. a 0值将是所有集合的一部分,或无.它只是行不通的. 其他解决方案 虽然零表示没有设置任何位,但是具有0的命名常数通常是非常有用的. 当我设置标志单词时,我定义了位的名称,以便它们都代表非默认值.也就是说,枚举值总是初始化为零,将"关闭" Bitfield代
0 2024-04-21
编程技术问答社区
不用输入类名就能获得枚举?
我注意到在C#中,当我有枚举时,说: class ClassObject { public static Enum EventType = {Click, Jump, Etc}; } 当我必须访问它时,我必须经过它的主要班级,这是非常详细的.例如: ClassObject.EventType.Click 我希望我可以以较短的方式访问它,说: EventType.Click,可以让我得到. 所以我认为我可以尝试创建一个单独的类并从枚举扩展它: class EventType : Enum { Click, Jump, Etc; } 但是,这是我遇到的语法错误. 实际上,为此目的创建另一个单独的班级有些麻烦,我什至不知道这是否是一个好习惯.但是理想情况下,我只是希望缩短名称,并可能避免在访问枚举之前必须输入班级名称.这可能吗? 解决方案 您可以将枚举放在同类的同一深度,而不必是班级成员 namespace Test {
0 2024-04-21
编程技术问答社区
为什么我不能在一个只有一个隐式转换为枚举的类上切换?
我想知道为什么单个隐式转换向枚举值,如果转换为系统类型,则不会以相同的方式工作.我看不到任何技术原因,但是也许有人比我为我散发一些亮点. 以下内容无法与"A value of an integral type expected"和"Cannot implicitly convert type 'Test.En' to 'Test.Foo". 编译 void test1 (){ Foo f = new Foo(); switch (f) // Comment this line to compile //switch ((En)f) // Uncomment this line to compile { case En.One: break; } } ///////////////////////////////////////////////////////////////
0 2024-04-21
编程技术问答社区
如何在C#的Enum中设置字符串?
我想在C#中创建字符串ENUM 基本上我不是在Enum中设置表格名称.当我在当时的主页中打开表单时,我想切换表单名称的案例并打开该特定表单. 我知道ENUM只允许整数,但我想将其设置为string. 有什么想法吗? 解决方案 这样做: private IddFilterCompareToCurrent myEnum = (IddFilterCompareToCurrent )Enum.Parse(typeof(IddFilterCompareToCurrent[1]),domainUpDown1.SelectedItem.ToString()); [enum.parse]返回一个对象,因此您需要施放它. 其他解决方案 Enum cannot be string but you can attach attribute and than you can read the value of enum as below....................
0 2024-04-21
编程技术问答社区
IEnumerable<Enum>的扩展方法?
我有很多不同的枚举,例如... public enum MyEnum { [Description("Army of One")] one, [Description("Dynamic Duo")] two, [Description("Three Amigo's")] three, [Description("Fantastic Four")] four, [Description("The Jackson Five")] five } 我为任何枚举都写了一个扩展方法,以获取描述属性(如果有).足够简单... public static string GetDescription(this Enum currentEnum) { var fi = currentEnum.GetType().GetField(currentEnum.ToString()); var da = (DescriptionAttribute)
0 2024-04-21
编程技术问答社区
如何从其类型和值的名称创建枚举对象?
i具有枚举的类型(system.type)和一个包含枚举值的字符串. 例如.给定: enum MyEnum { A, B, C }; 我有类型(myenum)和" B". 如何创建设置为myenum.b? 的肌髓对象 解决方案 MyEnum enumValue = (MyEnum)Enum.Parse(typeof(MyEnum), "B"); 您也有一个不敏感的超载. 其他解决方案 我认为您无法访问肌部,只能typeof(myenum): void foo(Type t) { Object o = Enum.Parse(t, "B"); } 其他解决方案 您可以使用仿制药来完成此操作.我创建了一个实用程序来包装以下内容: public static class Utils { public static T ParseEnum(string value) { return (T)Enum.Pa
0 2024-04-21
编程技术问答社区
为什么枚举参数无法在Overroad方法中接受INT值(> 0)
这是我的代码: public class Program { public enum SexEnum{ Male, Female } public static void Test(SexEnum s){ Console.WriteLine("enum..."); } public static void Test(Object s){ Console.WriteLine("object..."); } public static void Main(string[] args) { Test(0); Test(1); } } ,但实际结果是: enum... object... 为什么枚举参数不能在过载方法中接受int值(> 0)? 解决方案 这是在语言规范中明确指定的,第6.1
6 2024-04-20
编程技术问答社区
C#函数,接受一个枚举项目并返回枚举值(而不是索引)。
说我有以下声明: public enum Complexity { Low = 0, Normal = 1, Medium = 2, High = 3 } public enum Priority { Normal = 1, Medium = 2, High = 3, Urgent = 4 } 我想编码它,以便我可以获得枚举值(不是我之前提到的索引): //should store the value of the Complexity enum member Normal, which is 1 int complexityValueToStore = EnumHelper.GetEnumMemberValue(Complexity.Normal); //should store the value 4 int priorityValueToStore = EnumHelper.GetEnumMemberValue(Priority.Urgent); 此可重
4 2024-04-20
编程技术问答社区
下一个或上一个枚举
给定一个分配值的枚举,什么是获得值下一个或上一个枚举的最佳方法.例如,考虑以下枚举: public enum TimeframeType { None = 0, [Description("1 month")] Now = 30, [Description("1-3 months")] Short = 90, [Description("3-6 months")] Medium = 180, [Description("6+ months")] Long = 360 } 有没有一个很好的方法创建一个函数,该函数可以返回timeframetype.now and enumnext(timeframetype.short)返回timeframetype.medium? 我已经写了一项丑陋的Enumnext实施,但我不相信这是最好的方法.我希望别人已经解决了这个问题. public static T
0 2024-04-20
编程技术问答社区
实体框架-在数据库中保存枚举的ICollection
我有一个类型ICollection的属性. 说例如,我们有以下enumeration: public enum CustomerType { VIP, FrequentCustomer, BadCustomer } 我们也有以下类: public class Customer { public int Id { get;set; } public string FirstName { get;set; } public string LastName { get;set; } public ICollection CustomerAtrributes { get;set; } } 我如何在数据库中存储属性CustomerAtrributes以后很容易检索? 例如,我正在寻找以下内容: CustomerId | FirstName | LastName
0 2024-04-20
编程技术问答社区
将枚举值绑定到标签XAML上
我正在使用枚举字段遵循我的程序的状态. public enum StatiMacchina { InAvvio = 1, Pronta = 2, InLavorazione = 3, InMovimento = 4, InAttesa = 5, InErrore = 6 } 我将绑定以下字段的状态(在主窗口中) public StatiMacchina StatoMacchina { get; set; } 用xaml中的标签. 我使用转换器(在转换函数下方) public object Convert(object value, Type targetType
0 2024-04-20
编程技术问答社区
C#: 从KeyEventArgs'KeyData中获取正确的按下的按键
我正在捕获KeyDown事件,我需要能够检查当前按键是否为: ctrl + shift> shift + m m ? 我知道我需要从KeyEventArgs,Keys枚举以及带有枚举标志和位的东西中使用e.KeyData,但我不确定如何检查组合. 解决方案 您需要使用修饰符 keyeventargs类的属性. 类似: //asumming e is of type KeyEventArgs (such as it is // on a KeyDown event handler // .. bool ctrlShiftM; //will be true if the combination Ctrl + Shift + M is pressed, false otherwise ctrlShiftM = ((e.KeyCode == Keys.M) && // test for M pressed ((
0 2024-04-20
编程技术问答社区
C#: 从KeyEventArgs'KeyData中获取正确的按下的按键
我正在捕获KeyDown事件,我需要能够检查当前按键是否为: ctrl + shift> shift + m m ? 我知道我需要从KeyEventArgs,Keys枚举以及带有枚举标志和位的东西中使用e.KeyData,但我不确定如何检查组合. 解决方案 您需要使用修饰符 keyeventargs类的属性. 类似: //asumming e is of type KeyEventArgs (such as it is // on a KeyDown event handler // .. bool ctrlShiftM; //will be true if the combination Ctrl + Shift + M is pressed, false otherwise ctrlShiftM = ((e.KeyCode == Keys.M) && // test for M pressed ((
0 2024-04-20
编程技术问答社区
我可以在C#中为枚举创建接口吗?
假设我有两个枚举如下: namespace A { public enum AE { AE_0, AE_1 } } namespace B { public enum BE { BE_0, BE_1 } } 我想使用这两个枚举看起来像一个枚举,以便在一个功能中,我们可以同时使用f(ae)和f(be)而无需定义两个函数. 据我所知,我们可以为两个不同类创建一个接口,以便如果我们将接口分配为参数,则可以使用这两个类. 我可以为枚举做同样的事情吗? 谢谢. edit :我提出了问题.因为我已经在名称空间A中枚举A.我已经有一个具有枚举A作为参数的函数f.现在,我想在命名空间B中使用枚举B的函数f.我遇到了一个错误,因为枚举A和枚举B无法彼此转换.谢谢. 解决方案 否,您不能,因为enum从 System.Enum ,仅此而已. 此外,尽管
0 2024-04-20
编程技术问答社区
自定义枚举解析
我的枚举如下: public enum MyEnum { One, Two, Three} ,我想将一些字符串削减到上方的枚举上,例如,下面的字符串将被解析为肌部. "Two", "TWO", "Second", "2" 我知道我可以维护映射功能来完成这项工作.但是,我只想找到一种更好的方法,例如覆盖枚举函数或类似的东西.我试图使用IconVertable,但似乎不可能.有什么想法吗? 解决方案 [AttributeUsage(AttributeTargets.Field, AllowMultiple = true)] public class NameAttribute : Attribute { public readonly string[] Names; public NameAttribute(string name) { if (name == null) { th
0 2024-04-20
编程技术问答社区