コード例 #1
0
        public static void Validate <T>(this T value, [InvokerParameterName][NotNull] string argumentName, EnumIs validationType) where T : struct
        {
            switch (validationType)
            {
            case EnumIs.Member:
            case EnumIs.NonZeroMember:
                var enumType = typeof(T);

                if (!enumType.IsEnum)
                {
                    throw new ArgumentOutOfRangeException(nameof(value), value, $@"'{nameof(value)}' is not an enum type.");
                }

                if (!Enum.IsDefined(enumType, value))
                {
                    throw new ArgumentOutOfRangeException(argumentName, value, $@"'{argumentName}' is not a valid member of the [{enumType.FullName}] type.");
                }

                if (validationType == EnumIs.NonZeroMember)
                {
                    if (value is Enum)
                    {
                        var type = Enum.GetUnderlyingType(typeof(T));

                        var integerValue = System.Convert.ChangeType(value, type);

                        var e = System.Convert.ToInt64(integerValue);

                        if (e.Equals(0))
                        {
                            throw new ArgumentOutOfRangeException(argumentName, value, $@"'{argumentName}' is set to 'Unknown'.");
                        }
                    }
                }

                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(validationType), validationType, $@"'{nameof(validationType)}' is not a valid member of the [{ErrorMessages.GetRepresentation(typeof(EnumIs))}] type.");
            }
        }
コード例 #2
0
        public static void Validate <TEnum>(this TEnum argumentValue, [NotNull][InvokerParameterName] string argumentName, EnumIs validation)
            where TEnum : struct
        {
            var type = typeof(TEnum);

            if (!type.IsEnum)
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Exceptions.Validate_EnumValueNotEnum, nameof(argumentValue)),
                                            nameof(argumentValue));
            }

            if (validation == EnumIs.None)
            {
                return;
            }

            if (!Enum.IsDefined(typeof(EnumIs), validation))
            {
                throw new ArgumentOutOfRangeException(nameof(validation), validation,
                                                      string.Format(CultureInfo.CurrentCulture, Exceptions.Validate_ValidationKindWrong, nameof(validation), nameof(EnumIs)));
            }

            if (validation.HasFlag(EnumIs.ValidMember) && !Enum.IsDefined(type, argumentValue))
            {
                throw new ArgumentOutOfRangeException(nameof(validation), validation,
                                                      string.Format(CultureInfo.CurrentCulture, Exceptions.Validate_EnumValueNotMember, argumentName, type.Namespace, type.Name));
            }

            if (validation.HasFlag(EnumIs.NonZero))
            {
                var value = Convert.ToInt32(argumentValue, CultureInfo.InvariantCulture);

                if (value == 0)
                {
                    throw new ArgumentOutOfRangeException(nameof(validation), validation,
                                                          string.Format(CultureInfo.CurrentCulture, Exceptions.Validate_ValueZero, argumentName));
                }
            }

            Contract.EndContractBlock();
        }