Tag: enums

下一个或上一个枚举

给定已分配值的枚举,给出值的下一个或上一个枚举的最佳方法是什么。 例如,考虑这个枚举: 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 } 是否有一种很好的方法创建一个可以执行EnumPrevious(TimeframeType.Short)返回TimeframeType.Now和EnumNext(TimeframeType.Short)的函数返回TimeframeType.Medium的函数? 我已经写了一个丑陋的EnumNext实现,但我不相信这是最好的方法。 我希望其他人已经解决了这个问题。 public static T EnumNext(T value) where T : struct { T[] values = (T[])Enum.GetValues(typeof(T)); int i; for (i = 0; i = […]

带有generics的C#boxing枚举错误

我不明白这里发生了什么…… 我有以下错误: 类型’TestApp.TestVal’不能用作generics类型或方法’TestApp.SomeClass’中的类型参数’T’ ‘TestApp.SomeClass’ 。 没有从’TestApp.TestVal’到’System.IComparable’装箱转换。 以下代码发生此错误: public enum TestVal { First, Second, Third } public class SomeClass where T : IComparable { public T Stored { get { return storedval; } set { storedval = value; } } private T storedval; } class Program { static void Main(string[] args) { //Error is on the […]

将枚举转换为int

我有以下枚举 public enum TESTENUM { Value1 = 1, Value2 = 2 } 然后我想用它来比较我有的整数变量,如下所示: if ( myValue == TESTENUM.Value1 ) { } 但是为了做这个测试,我必须按如下方式强制转换枚举(或者可能将整数声明为类型枚举): if ( myValue == (int) TESTENUM.Value1 ) { } 有没有办法可以告诉编译器枚举是一系列整数,这样我就不必执行此操作或重新定义变量?

你会在long switch / enum声明中使用区域吗?

我最近发现自己需要(是的,需要)在C#代码中定义荒谬的长switch语句和enum声明,但我想知道人们认为将它们分成逻辑子部分的最佳方法。 在我的情况下,枚举值和案例(基于枚举值)都有相当清晰的分组,但我稍微不确定如何在代码中反映这一点。 请注意,在我的代码中,我有大约5组,每组10到30个枚举值/个案。 我能想到的三个含糊不清的选择是: 在声明中定义case / enum值的所有逻辑组周围的#region块(可选地用空行分隔)。 使用它的名称对每个组进行注释,并在每个组名注释前添加一个空行。 什么都不做 – 只需将开关/枚举作为一个巨大的案例/值列表。 你喜欢哪个? 你会分开处理枚举和开关吗? (这对我来说似乎有些奇怪。)现在,我不会说这个问题有任何正确/错误的答案,尽管我仍然非常有兴趣听取一般意见的一致意见。 注1:遗憾的是,我可能有一个非常长的枚举声明50/100 +值的情况是不可避免的(和开关一样),因为我试图写一个词法分析器(tokeniser),这看起来似乎是最合理的方法有几个原因。 注2:我完全清楚在是否在一般代码中使用区域(主要用于构造类)的问题上已经存在几个重复的问题,但我觉得我的问题更加具体,尚未得到解决。

C#如何在类中使用get,set和use enums

我有一个程序,我使用类存储设置。 我需要它来使用set和get函数来更改和存储设置。 我试过这个,但我没有让它发挥作用。 任何人都可以帮我这个吗? private enum _Difficulty { Easy, Normal, Hard }; public void SetDifficulty(Difficulty) { _Difficulty = Difficulty; } public enum GetDifficulty() { return _Difficulty; } 有没有办法在get和set的类中使用enums ? 我还需要bool和int 。

在C#中设置运行时的枚举值

有什么办法可以在运行时更改enum值吗? 例如,我有以下类型 enum MyType { TypeOne, //=5 at runtime TypeTwo //=3 at runtime } 我想在运行时将set 5设置为TypeOne ,将3设置为TypeTwo 。

将通用T转换为System.Enum

我有一个Enum s列表作为IEnumerable ,我需要循环每个项目并得到它的描述如下: IEnumerable values = (T[])Enum.GetValues(typeof(T)); foreach (Enum value in values) { String mylist = Common.MyExtensions.getEnumDescription(value); } … public static string getEnumDescription(Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false); if (attributes != null && attributes.Length > 0) { return attributes[0].Description; } else return value.ToString(); } 这会在foreach部分产生错误 无法将“T”转换为System.Enum。 IEnumerable首先不是System.Enum的列表吗? 什么样的演员可以做到这一点?

C#enums类型是否安全?

C#enums类型是否安全? 如果没有意义?

C#枚举到字符串自动转换?

是否可以让编译器自动将我的Enum值转换为字符串,这样我就可以避免每次都显式调用ToString方法。 这是我想做的一个例子: enum Rank { A, B, C } Rank myRank = Rank.A; string myString = Rank.A; // Error: Cannot implicitly convert type ‘Rank’ to ‘string’ string myString2 = Rank.A.ToString(); // OK: but is extra work

假设DayOfWeek的数值是否安全?

我将星期几存储在数据库中,其中星期日= 1,星期一= 2等。 在来自数据库的查询中,我需要将该日转换为System.DayOfWeek 。 根据MSDN : 此枚举中常量的值范围从DayOfWeek.Sunday到DayOfWeek.Saturday 。 如果强制转换为整数,则其值的范围从零(表示DayOfWeek.Sunday )到六(表示DayOfWeek.Saturday )。 这意味着在我查询数据之后,我需要在将结果转换为DayOfWeek之前减去1。 这样安全吗? 或者我是否需要担心DayOfWeek的数值变化?