mirror of https://github.com/dahall/Vanara.git
Fixed bug in CanGet method when value supported more than one type.
parent
cba9506edc
commit
602f847bd8
|
@ -67,7 +67,7 @@ namespace Vanara.InteropServices
|
||||||
/// <param name="value">The enumeration type.</param>
|
/// <param name="value">The enumeration type.</param>
|
||||||
/// <param name="typeRef">The type supplied by the user to validate.</param>
|
/// <param name="typeRef">The type supplied by the user to validate.</param>
|
||||||
/// <returns><c>true</c> if this instance can get the specified type; otherwise, <c>false</c>.</returns>
|
/// <returns><c>true</c> if this instance can get the specified type; otherwise, <c>false</c>.</returns>
|
||||||
public static bool CanGet<TEnum>(TEnum value, Type typeRef) where TEnum : System.Enum => GetAttrForEnum(value).Any(a => a.Action.IsFlagSet(CorrespondingAction.Get) && a.TypeRef == typeRef);
|
public static bool CanGet<TEnum>(TEnum value, Type typeRef) where TEnum : System.Enum => GetAttrForEnum(value, CorrespondingAction.Get).Any(a => a.TypeRef == typeRef);
|
||||||
|
|
||||||
/// <summary>Determines whether this type can get the specified reference type.</summary>
|
/// <summary>Determines whether this type can get the specified reference type.</summary>
|
||||||
/// <param name="type">The class type.</param>
|
/// <param name="type">The class type.</param>
|
||||||
|
@ -140,18 +140,12 @@ namespace Vanara.InteropServices
|
||||||
/// <param name="value">The enum value.</param>
|
/// <param name="value">The enum value.</param>
|
||||||
/// <param name="action">The action to filter for.</param>
|
/// <param name="action">The action to filter for.</param>
|
||||||
/// <returns>An enumeration of all associated CorrespondingTypeAttribute instances.</returns>
|
/// <returns>An enumeration of all associated CorrespondingTypeAttribute instances.</returns>
|
||||||
protected static IEnumerable<CorrespondingTypeAttribute> GetAttrForEnum<TEnum>(TEnum value, CorrespondingAction action) where TEnum : System.Enum =>
|
protected static IEnumerable<CorrespondingTypeAttribute> GetAttrForEnum<TEnum>(TEnum value, CorrespondingAction action = (CorrespondingAction)0xf) where TEnum : System.Enum
|
||||||
GetAttrForEnum(value).Where(a => a.Action.HasFlag(action));
|
|
||||||
|
|
||||||
/// <summary>Gets the CorrespondingTypeAttribute instances associated with an enum value.</summary>
|
|
||||||
/// <param name="value">The enum value.</param>
|
|
||||||
/// <returns>An enumeration of all associated CorrespondingTypeAttribute instances.</returns>
|
|
||||||
protected static IEnumerable<CorrespondingTypeAttribute> GetAttrForEnum<TEnum>(TEnum value) where TEnum : System.Enum
|
|
||||||
{
|
{
|
||||||
var valueType = value.GetType();
|
var valueType = value.GetType();
|
||||||
var attr = valueType.GetField(value.ToString()).GetCustomAttributes<CorrespondingTypeAttribute>();
|
var attr = valueType.GetField(value.ToString()).GetCustomAttributes<CorrespondingTypeAttribute>(false, a => a.Action.HasFlag(action));
|
||||||
if (!attr.Any()) return new CorrespondingTypeAttribute[0];
|
|
||||||
if (attr.Any(a => a.Action == CorrespondingAction.Exception)) throw new Exception();
|
if (attr.Any(a => a.Action == CorrespondingAction.Exception)) throw new Exception();
|
||||||
|
//if (!attr.Any()) return new CorrespondingTypeAttribute[0];
|
||||||
return attr;
|
return attr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue