在c#中,是否有可能用属性装饰Enum类型或做一些其他事情来指定默认值应该是什么,而不改变值?由于某种原因,所需的数字可能是固定不变的,而且仍然可以控制默认值是很方便的。

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

Orientation o; // Is 'North' by default.

当前回答

如果你将默认enum定义为最小值的enum,你可以使用这个:

public enum MyEnum { His = -1, Hers = -2, Mine = -4, Theirs = -3 }

var firstEnum = ((MyEnum[])Enum.GetValues(typeof(MyEnum)))[0];

firstEnum == Mine.

这并没有假设枚举值为零。

其他回答

还有一种方法可能会有帮助——使用某种“别名”。 例如:

public enum Status
{
    New = 10,
    Old = 20,
    Actual = 30,

    // Use Status.Default to specify default status in your code. 
    Default = New 
}

实际上,枚举的默认值是枚举中第一个值为0的元素。

例如:

public enum Animals
{
    Cat,
    Dog,
    Pony = 0,
}
//its value will actually be Cat not Pony unless you assign a non zero value to Cat.
Animals animal;

如果你将默认enum定义为最小值的enum,你可以使用这个:

public enum MyEnum { His = -1, Hers = -2, Mine = -4, Theirs = -3 }

var firstEnum = ((MyEnum[])Enum.GetValues(typeof(MyEnum)))[0];

firstEnum == Mine.

这并没有假设枚举值为零。

枚举类型的默认值为0:

默认情况下,第一个枚举数的值为0,值为 每个连续的枚举数加1。” 值类型enum包含表达式(E)0产生的值,其中E是enum 标识符”。

你可以在这里查看c#枚举的文档和c#默认值表的文档。

枚举的默认值是等于0的枚举值。我不相信这可以通过属性或其他方式改变。

(MSDN说:“enum E的默认值是表达式(E)0产生的值。”)