public static bool IsDefined(Type enumType, object value){ if (enumType == null) { throw new ArgumentNullException("enumType"); } if (!(enumType is RuntimeType)) { throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "enumType"); } if (!enumType.IsEnum) { throw new ArgumentException(Environment.GetResourceString("Arg_MustBeEnum"), "enumType"); } if (value == null) { throw new ArgumentNullException("value"); } Type type = value.GetType(); if (!(type is RuntimeType)) { throw new ArgumentException(Environment.GetResourceString("Arg_MustBeType"), "valueType"); } Type underlyingType = GetUnderlyingType(enumType); if (type.IsEnum) { Type type3 = GetUnderlyingType(type); if (type != enumType) { throw new ArgumentException(string.Format(Environment.GetResourceString("Arg_EnumAndObjectMustBeSameType"), type.ToString(), enumType.ToString())); } type = type3; } else if ((type != underlyingType) && (type != stringType)) { throw new ArgumentException(string.Format(Environment.GetResourceString("Arg_EnumUnderlyingTypeAndObjectMustBeSameType"), type.ToString(), underlyingType.ToString())); } if (type == stringType) { string[] names = GetHashEntry(enumType).names; for (int i = 0; i < names.Length; i++) { if (names[i].Equals((string) value)) { return true; } } return false; } ulong[] values = GetHashEntry(enumType).values; if ((((type != intType) && (type != typeof(short))) && ((type != typeof(ushort)) && (type != typeof(byte)))) && (((type != typeof(sbyte)) && (type != typeof(uint))) && ((type != typeof(long)) && (type != typeof(ulong))))) { throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_UnknownEnumType")); } ulong num2 = ToUInt64(value); return (BinarySearch(values, num2) >= 0);}