首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在不更改值的情况下选择枚举类型的默认值

在不更改值的情况下选择枚举类型的默认值
EN

Stack Overflow用户
提问于 2009-02-09 20:59:20
回答 13查看 219.2K关注 0票数 221

在C#中,有没有可能用属性修饰枚举类型,或者做其他事情来指定默认值应该是什么,而不需要更改这些值?无论出于什么原因,所需的数字可能都是板上钉钉的,如果仍然可以控制缺省值,那将是非常方便的。

代码语言:javascript
复制
enum Orientation
{
    None = -1,
    North = 0,
    East = 1,
    South = 2,
    West = 3
}

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

回答 13

Stack Overflow用户

回答已采纳

发布于 2009-02-09 21:01:29

enum (实际上是任何值类型)的默认值是0 --即使这不是该enum的有效值。它不能更改。

票数 375
EN

Stack Overflow用户

发布于 2010-03-09 22:26:30

任何枚举的默认值都是零。因此,如果要将一个枚举器设置为默认值,则将该枚举器设置为零,并将所有其他枚举器设置为非零(如果有多个枚举器的值为零,则第一个值为零的枚举器将成为该枚举的默认值)。

代码语言:javascript
复制
enum Orientation
{
    None = 0, //default value since it has the value '0'
    North = 1,
    East = 2,
    South = 3,
    West = 4
}

Orientation o; // initialized to 'None'

如果您的枚举器不需要显式的值,那么只需确保第一个枚举器是您希望成为默认枚举器的枚举器,因为“默认情况下,第一个枚举器的值为0,并且每个后续枚举器的值都加1。”(C# reference)

代码语言:javascript
复制
enum Orientation
{
    None, //default value since it is the first enumerator
    North,
    East,
    South,
    West
}

Orientation o; // initialized to 'None'
票数 68
EN

Stack Overflow用户

发布于 2011-12-06 01:05:23

如果0不是合适的默认值,您可以使用组件模型来定义枚举的解决方法:

代码语言:javascript
复制
[DefaultValue(None)]
public enum Orientation
{
     None = -1,
     North = 0,
     East = 1,
     South = 2,
     West = 3
 }

public static class Utilities
{
    public static TEnum GetDefaultValue<TEnum>() where TEnum : struct
    {
        Type t = typeof(TEnum);
        DefaultValueAttribute[] attributes = (DefaultValueAttribute[])t.GetCustomAttributes(typeof(DefaultValueAttribute), false);
        if (attributes != null &&
            attributes.Length > 0)
        {
            return (TEnum)attributes[0].Value;
        }
        else
        {
            return default(TEnum);
        }
    }
}

然后你可以调用:

代码语言:javascript
复制
Orientation o = Utilities.GetDefaultValue<Orientation>();
System.Diagnostics.Debug.Print(o.ToString());

注意:您需要在文件的顶部包含以下行:

代码语言:javascript
复制
using System.ComponentModel;

这不会更改枚举的实际C#语言缺省值,但提供了一种指示(和获取)所需缺省值的方法。

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/529929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档