Tag: enums

在C#中的方法中定义枚举?

我主要是C ++背景,我正在学习C#。 所以,我需要一些C#习语和风格的帮助。 我试图在C#中编写一个小型文本文件解析方法,其中我需要一个具有三种状态的简单状态变量。 在C ++中,我会为状态变量声明一个这样的enum : enum { stHeader, stBody, stFooter} state = stBody; …然后在我的解析循环中使用它,如下所示: if (state == stHeader && input == “.endheader”) { state = stBody; } 在C#中,我意识到在方法中声明enum是不可能的。 那么,为了清洁风格,我应该做些什么呢? 在方法之外声明这个内部enum ? 使用魔数1,2,3? 为此创建一个单独的类? 请帮我澄清一下我的困惑。

如何在界面中表示枚举

好的,所以这篇文章的基础和解释标题很简单。 我有一个方法的接口。 用户端的该方法将枚举作为参数。 但是你不能在界面中定义枚举因此我不知道如何定义这个方法然后如果我期待一个类型枚举作为传入参数之一。 那你怎么处理这种情况呢? 你怎么能在你的界面中获得该方法。 你不知道他们需要发送什么Enum但是你肯定知道你想要它是一个enum而不是魔术字符串。 枚举不是引用类型,因此您不能将Object用作传入参数的类型。 所以不知道该怎么做。

避免魔术字符串和数字

我正在研究过去几年由各种程序员编辑过的应用程序,我偶然发现了使用String Literals访问MenuItems的问题。 例如:在很多地方都有类似的代码 mainMenu.MenuItems[1].MenuItems[0].Visible=true; 要么 mainMenu.MenuItems[“View”].MenuItems[“FullScreen”].Visible=true; 如何更改用于标识MenuItem的字符串并捕获它用于访问的所有位置? 菜单和菜单项被声明为公共,并在整个大型应用程序中使用 什么是防止使用这些魔术索引的正确方法。 每次添加新项目或更改名称时,我都会预测会被破坏。 PS我已经开始使用枚举字典方法,其中每个menuItem都与一个键配对。 但这仍然不会强迫其他开发人员使用我的实现,也不是问题2的最优雅的解决方案

嵌套枚举的替代方案

我正在尝试创建几个enums ,这给出了Dropdown.Category.Subcategory的语法。 但是,我一直在读,这不是一个好主意。 我对此的选择主要是因为根据类别的选择,我想不出任何其他方式来选择不同的enum值,然后子类别的选择取决于基于enum值的所选enum 。 有没有更好的方法来创建这样的function? 我希望能够轻松识别.Category和.Subcategory名称,如果此代码可读,这将是一个奖励。 为了说清楚,我希望能够选择Category ,然后选择适当的Subcategory 。 public class Dropdown { public enum Gifts { GreetingCards, VideoGreetings, UnusualGifts, ArtsAndCrafts, HandmadeJewelry, GiftsforGeeks, PostcardsFrom, RecycledCrafts, Other } public enum GraphicsAndDesign { CartoonsAndCaricatures, LogoDesign, Illustration, EbookCoversAndPackages, WebDesignAndUI, PhotographyAndPhotoshopping, PresentationDesign, FlyersAndBrochures, BusinessCards, BannersAndHeaders, Architecture, LandingPages, Other } }

在运行时创建/修改枚举

我正在创建一个程序,用户可以选择创建自己的自定义属性,最终将显示在PropertyGrid 。 现在我不想搞乱自定义编辑器,所以我只允许PropertyGrid已经在编辑器中构建的原始类型属性( string , int , double , DateTime , bool等)。 但是,我还希望为用户提供创建多选属性的选项,他们可以在这些属性中定义可能值的列表,这些值又将显示为PropertyGrid的下拉列表。 当我在代码中对Enum进行硬编码时,属性网格会自动将该enum的属性显示为下拉列表。 但是我可以在运行时创建和/或修改枚举,以便用户可以添加另一个属性选项,并返回到PropertyGrid并在下拉列表中查看它们的新选项吗? 更新 考虑到Patricks的评论,我认为Enum在这种情况下不是正确的方法。 那么我怎样才能使用字符串列表填充PropertyGrid项目中的下拉列表? 这需要自定义编辑器吗?

为什么Enum.Parse()返回对象?

关于将字符串转换为枚举值有很多问题。 一般来说,答案看起来像这个问题的答案: StatusEnum MyStatus = (StatusEnum) Enum.Parse( typeof(StatusEnum), “Active”, true ); 虽然这是一个非常合理的答案,并且您可以编写一个简化调用的方法,但它没有回答为什么 Enum.Parse()返回一个object而不是相应的枚举值的问题。 为什么我必须将其StatusEnum为StatusEnum ? 编辑: 基本上,问题是为什么这样的函数不是Enum类的一部分? public static T Parse(string value) where T: struct { return (T)Enum.Parse(typeof (T), value); } 这个function完美无缺,完全符合您的期望。 StatusEnum e = Enum.Parse(“Active”); 。

最佳实践返回值与例外与Enum

我试图找出具有多个结果值的方法的优点和缺点。 例如,我正在使用登录方法。 如果登录成功,它将通过,否则我需要知道它失败的原因。 1.返回true或false (信息不足) bool Login(string user, string password); 2.如果成功则返回true,否则抛出exception public class UnknownUserException : Exception { } public class WrongPasswordException : Exception { } bool Login(string user, string password); 什么都没有。 如果不成功则抛出exception public class UnknownUserException : Exception { } public class WrongPasswordException : Exception { } void Login(string user, string password); 4.返回枚举值 enum LoginResult { […]

c#长值的枚举

我想知道为什么这个宣言: public enum ECountry : long { None, Canada, UnitedStates } 需要为其任何值进行演员表? long ID = ECountry.Canada; // Error Cannot implicitly convert type ‘ECountry’ to ‘long’. // An explicit conversion exists (are you missing a cast?) 除了演员之外,还有什么方法可以直接从枚举中获取长值吗? 这不会起作用,例如: public enum ECountry : long { None = 0L, Canada = 1L, UnitedStates=2L }

enum 是IEnumerable 在generics方法中返回true

这是此问题的后续内容: 对通用枚举集合应用的Cast .Cast 会导致无效的强制转换exception enum Gender { Male, Female } Gender g = Gender.Male; bool b = g is int; // false, alright no issues b = new[] { g } is IEnumerable; // false, alright no issues b = Is(g); //false, alright no issues b = Is<Gender[], IEnumerable>(new[] { g }); // true, why […]

根据索引检索Enum的值 – c#

这是我的枚举: public enum DocumentTypes { [EnumMember] TYPE_1 = 1, [EnumMember] TYPE_2 = 2, [EnumMember] TYPE_3 = 3, [EnumMember] TYPE_4 = 4, [EnumMember] TYPE_5 = 5, [EnumMember] TYPE_6 = 6, [EnumMember] TYPE_7 = 7, [EnumMember] TYPE_8 = 12 } 如果我想获得’TYPE_8’,如果我只有12,有没有办法获得枚举值? 我试过这个: ((DocumentTypes[])(Enum.GetValues(typeof(DocumentTypes))))[Convert.ToInt32(“3”)].ToString() 返回值’TYPE_4′