Xamarin Public Jenkins (auto-signing) e79aa3c0ed Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
2016-08-03 10:59:49 +00:00

43 lines
1.6 KiB
C#

//------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
namespace System.ServiceModel.Configuration
{
using System;
using System.ComponentModel;
using System.Configuration;
internal class StandardRuntimeFlagEnumValidator<TEnum> : ConfigurationValidatorBase where TEnum : struct
{
public StandardRuntimeFlagEnumValidator()
{
StandardRuntimeFlagEnumValidatorAttribute.ValidateFlagEnumType(typeof(TEnum));
}
public override bool CanValidate(Type type)
{
return (type == typeof(TEnum));
}
public override void Validate(object value)
{
if (!Enum.IsDefined(typeof(TEnum), value))
{
TEnum dummy;
if (!Enum.TryParse<TEnum>(value.ToString(), true, out dummy))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidEnumArgumentException("value", (int)value, typeof(TEnum)));
}
int combinedValue = (int)((object)dummy);
int[] values = (int[])Enum.GetValues(typeof(TEnum));
if (!StandardRuntimeFlagEnumValidatorAttribute.IsCombinedValue(combinedValue, values, values.Length - 1))
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidEnumArgumentException("value", (int)value, typeof(TEnum)));
}
}
}
}
}