在C#中,有没有可能用属性修饰枚举类型,或者做其他事情来指定默认值应该是什么,而不需要更改这些值?无论出于什么原因,所需的数字可能都是板上钉钉的,如果仍然可以控制缺省值,那将是非常方便的。
enum Orientation
{
None = -1,
North = 0,
East = 1,
South = 2,
West = 3
}
Orientation o; // Is 'North' by default.
发布于 2009-02-09 21:01:29
enum
(实际上是任何值类型)的默认值是0 --即使这不是该enum
的有效值。它不能更改。
发布于 2010-03-09 22:26:30
任何枚举的默认值都是零。因此,如果要将一个枚举器设置为默认值,则将该枚举器设置为零,并将所有其他枚举器设置为非零(如果有多个枚举器的值为零,则第一个值为零的枚举器将成为该枚举的默认值)。
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)
enum Orientation
{
None, //default value since it is the first enumerator
North,
East,
South,
West
}
Orientation o; // initialized to 'None'
发布于 2011-12-06 01:05:23
如果0不是合适的默认值,您可以使用组件模型来定义枚举的解决方法:
[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);
}
}
}
然后你可以调用:
Orientation o = Utilities.GetDefaultValue<Orientation>();
System.Diagnostics.Debug.Print(o.ToString());
注意:您需要在文件的顶部包含以下行:
using System.ComponentModel;
这不会更改枚举的实际C#语言缺省值,但提供了一种指示(和获取)所需缺省值的方法。
https://stackoverflow.com/questions/529929
复制相似问题