写一个EnumDefaultValue的范例:
[AttributeUsage(AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
public class EnumDefaultValueAttribute : Attribute
{
}
class Program
{
static voidMain(string[] args)
{
//指定默认枚举
int defalutValue;
bool isDefulat=TestEnum.GetDefaultEnum(typeof(EnumA), out defalutValue);
if (isDefulat)
{
Console.Write(defalutValue);
}
else
{
//默认枚举为最大值或最小值
int min=TestEnum.GetMin(typeof(EnumA));
int max=TestEnum.GetMax(typeof(EnumA));
Console.Write(min);
Console.Write(max);
}
Console.Read();
}
}
public enum EnumA
{
AAA = 1,
[EnumDefaultValue]
BBB = 2
}
public class TestEnum
{
public static bool GetDefaultEnum(TypeenumType, out intdefaultValue)
{
if (!enumType.IsEnum)
{
throw new ArgumentException("enumType无效");
}
FieldInfo[] fields = enumType.GetFields();
foreach (FieldInfofield in fields)
{
if (field.FieldType.IsEnum)
{
object[] itemAttributes =field.GetCustomAttributes(typeof(EnumDefaultValueAttribute), true);
if (itemAttributes != null&& itemAttributes.Length == 1)
{
EnumDefaultValueAttribute itemAttribute =itemAttributes[0] as EnumDefaultValueAttribute;
if (itemAttribute != null)
{
object enumItemObj =enumType.InvokeMember(field.Name, BindingFlags.GetField,null, null, null);
defaultValue = (int)enumItemObj;
return true;
}
}
}
}
defaultValue = int.MinValue;
return false;
}
public static int GetMin(TypeenumType)
{
if (!enumType.IsEnum)
{
throw new ArgumentException("enumType无效");
}
int min = int.MaxValue;
Array a = Enum.GetValues(enumType);
foreach (varitem in a)
{
int itemValue=(int)item;
if (itemValue < min)
{
min = itemValue;
}
}
return min;
}
public static int GetMax(TypeenumType)
{
if (!enumType.IsEnum)
{
throw new ArgumentException("enumType无效");
}
int max = int.MinValue;
Array a = Enum.GetValues(enumType);
foreach (varitem in a)
{
int itemValue = (int)item;
if (itemValue > max)
{
max = itemValue;
}
}
return max;
}
}