标签: enums

枚举命名惯例 - 复数

我问这个问题,尽管在枚举和匹配属性的C#命名约定中读过类似但不完全正确的内容

我发现我倾向于将枚举命名为复数,然后将它们用作单数,例如:

public enum EntityTypes {
  Type1, Type2
}

public class SomeClass {
  /*
    some codes
  */

  public EntityTypes EntityType {get; set;}

}
Run Code Online (Sandbox Code Playgroud)

当然它有效,这是我的风格,但任何人都可以找到这种惯例的潜在问题吗?我确实有一个"丑陋"的命名与"状态"一词:

public enum OrderStatuses {
  Pending, Fulfilled, Error, Blah, Blah
}

public class SomeClass {
  /*
    some codes
  */

  public OrderStatuses OrderStatus {get; set;}

}
Run Code Online (Sandbox Code Playgroud)

附加信息:也许我的问题不够明确.在命名我定义的枚举类型的变量时,我经常要努力思考.我知道最佳实践,但它无助于简化命名这些变量的工作.

我不可能将我的所有枚举属性(比如"状态")公开为"MyStatus".

我的问题:任何人都可以找到上述惯例的潜在问题吗?这不是最佳做法.

问题改写:

嗯,我想我应该这样问这个问题:有人能用一种很好的通用方法来命名枚举类型,这样在使用时,枚举"实例"的命名会非常简单吗?

.net c# enums naming-conventions plural

249
推荐指数
8
解决办法
12万
查看次数

Java:在子类下使用带有枚举的switch语句

首先,我将说明我对C#中的枚举更加熟悉,看起来java中的枚举非常混乱.

正如您所看到的,我正在尝试在下一个示例中使用switch语句@enums,但无论我在做什么,我总是会收到错误.

我收到的错误是:

SomeClass.AnotherClass.MyEnum.VALUE_A必须使用不合格的枚举常量替换合格的案例标签VALUE_A

事情是我非常理解错误,但我不能只编写VALUE_A,因为枚举位于另一个子类中.有没有办法解决这个问题?为什么它会在Java中发生?

//Main Class
public class SomeClass {

    //Sub-Class
    public static class AnotherClass {
        public enum MyEnum {
            VALUE_A, VALUE_B
        }    
        public MyEnum myEnum;
    }

    public void someMethod() { 
        MyEnum enumExample //...

        switch (enumExample) {
            case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
                //..
                break;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java enums switch-statement

239
推荐指数
5
解决办法
11万
查看次数

enum变量的默认值是什么

一个枚举变量,任何人都知道它是否总是默认为第一个元素?

.net c# enums

226
推荐指数
3
解决办法
13万
查看次数

如何将枚举值转换为int?

我有一个返回int类型的函数.但是,我只有TAX枚举的值.

如何将TAX枚举值转换为int?

public enum TAX {
    NOTAX(0),SALESTAX(10),IMPORTEDTAX(5);

    private int value;
    private TAX(int value){
        this.value = value;
    }
}

TAX var = TAX.NOTAX; // This value will differ

public int getTaxValue()
{
  // what do do here?
  // return (int)var;
}
Run Code Online (Sandbox Code Playgroud)

java enums

223
推荐指数
4
解决办法
24万
查看次数

Jackson enum Serializing和DeSerializer

我正在使用JAVA 1.6和Jackson 1.9.9我有一个枚举

public enum Event {
    FORGOT_PASSWORD("forgot password");

    private final String value;

    private Event(final String description) {
        this.value = description;
    }

    @JsonValue
    final String value() {
        return this.value;
    }
}
Run Code Online (Sandbox Code Playgroud)

我添加了一个@JsonValue,这似乎完成了将对象序列化为:

{"event":"forgot password"}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试反序列化时,我得到了一个

Caused by: org.codehaus.jackson.map.JsonMappingException: Can not construct instance of com.globalrelay.gas.appsjson.authportal.Event from String value 'forgot password': value not one of declared Enum instance names
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

java enums jsonserializer jackson

208
推荐指数
11
解决办法
22万
查看次数

从Description属性获取枚举

可能重复:
通过其描述属性查找枚举值

我有一个通用的扩展方法,它Description从以下方式获取属性Enum:

enum Animal
{
    [Description("")]
    NotSet = 0,

    [Description("Giant Panda")]
    GiantPanda = 1,

    [Description("Lesser Spotted Anteater")]
    LesserSpottedAnteater = 2
}

public static string GetDescription(this Enum value)
{            
    FieldInfo field = value.GetType().GetField(value.ToString());

    DescriptionAttribute attribute
            = Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute))
                as DescriptionAttribute;

    return attribute == null ? value.ToString() : attribute.Description;
}
Run Code Online (Sandbox Code Playgroud)

所以我可以......

string myAnimal = Animal.GiantPanda.GetDescription(); // = "Giant Panda"
Run Code Online (Sandbox Code Playgroud)

现在,我正试图在另一个方向上找出等效函数,比如......

Animal a = (Animal)Enum.GetValueFromDescription("Giant Panda", typeof(Animal));
Run Code Online (Sandbox Code Playgroud)

.net c# enums attributes

206
推荐指数
4
解决办法
18万
查看次数

如何在C++中将int转换为枚举?

如何在C++中将int转换为枚举?

例如:

enum Test
{
    A, B
};

int a = 1;
Run Code Online (Sandbox Code Playgroud)

如何转换a为Test :: A类型?

c++ enums casting

205
推荐指数
4
解决办法
24万
查看次数

如何在C++中使用枚举

假设我们有enum以下内容:

enum Days {Saturday, Sunday, Tuesday, Wednesday, Thursday, Friday};
Run Code Online (Sandbox Code Playgroud)

我想创建一个这样的实例enum并用适当的值初始化它,所以我做:

Days day = Days.Saturday;
Run Code Online (Sandbox Code Playgroud)

现在我想用现有enum值检查我的变量或实例,所以我这样做:

if (day == Days.Saturday)
{
    std::cout << "Ok its Saturday";
}
Run Code Online (Sandbox Code Playgroud)

这给了我一个编译错误:

错误:'.'之前的预期primary-expression 代币

所以要说清楚,说:有什么区别:

if (day == Days.Saturday) // Causes compilation error
Run Code Online (Sandbox Code Playgroud)

if (day == Saturday)
Run Code Online (Sandbox Code Playgroud)

这两个实际上是指什么,一个是好的,一个导致编译错误?

c++ enums

202
推荐指数
9
解决办法
40万
查看次数

选择Enum类型的默认值而不必更改值

在C#中,是否可以使用属性修饰Enum类型或执行其他操作来指定默认值应该是什么,而不更改值?无论出于何种原因,所需的数字可能都是一成不变的,并且仍然可以控制默认值.

enum Orientation
{
    None = -1,
    North = 0,
    East = 1,
    South = 2,
    West = 3
}

Orientation o; // Is 'North' by default.
Run Code Online (Sandbox Code Playgroud)

.net c# enums

198
推荐指数
7
解决办法
16万
查看次数

枚举上最常见的C#按位操作

对于我的生活,我不记得如何设置,删除,切换或测试位域中的位.要么我不确定,要么混淆它们,因为我很少需要这些.因此,"比特作弊表"会很好.

例如:

flags = flags | FlagsEnum.Bit4;  // Set bit 4.
Run Code Online (Sandbox Code Playgroud)

要么

if ((flags & FlagsEnum.Bit4)) == FlagsEnum.Bit4) // Is there a less verbose way?
Run Code Online (Sandbox Code Playgroud)

您能举例说明所有其他常见操作,最好是使用[Flags]枚举的C#语法吗?

.net c# enums flags bit-manipulation

197
推荐指数
9
解决办法
16万
查看次数