public static IReadOnlyDictionary <int, TEnum> MapToLookupTable <TLookup, TEnum>( this IQueryable <TLookup> lookupTerms, IReadOnlyDictionary <string, TEnum> enumValuesByAlternateTerm = null) where TLookup : IAopWikiIdentifiable, ITerm where TEnum : struct { if (!typeof(TEnum).GetTypeInfo().IsEnum) { throw new ArgumentException($"{typeof(TEnum).Name} must be an enum type."); } return(lookupTerms.ToList() .ToDictionary( x => x.Id, x => { var enumMember = default(TEnum); if (enumValuesByAlternateTerm?.TryGetValue(x.Term, out enumMember) ?? false) { return enumMember; } return UnsafeEnums.GetMember <TEnum>(GetEnumMemberName(x.Term), true)?.Value ?? throw new ArgumentException( $"Could not find enum value {x.Term} in type {typeof(TEnum).Name}"); })); }
public void UnsafeEnumsBasicTest() { TestHelper.ExpectException <ArgumentException>(() => UnsafeEnums.GetUnderlyingType <int>()); TestHelper.ExpectException <ArgumentException>(() => UnsafeEnums.GetUnderlyingType <Enum>()); TestHelper.ExpectException <ArgumentException>(() => UnsafeEnums.GetUnderlyingType <string>()); Assert.AreEqual(typeof(short), UnsafeEnums.GetUnderlyingType <DateFilterOperator>()); }