Browse Source

Return `EnumValues` for `nullable enum`.

pull/21675/head
maliming 2 years ago
parent
commit
362e5eb51d
No known key found for this signature in database GPG Key ID: A646B9CB645ECEA4
  1. 17
      framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs
  2. 8
      framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs

17
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs

@ -242,7 +242,7 @@ public class CachedObjectExtensionsDtoService : ICachedObjectExtensionsDtoServic
e => e.GetProperties()
)
)
.Where(p => p.Type.IsEnum)
.Where(p => p.Type.IsEnum || TypeHelper.IsNullableEnum(p.Type))
.ToList();
foreach (var enumProperty in enumProperties)
@ -260,12 +260,23 @@ public class CachedObjectExtensionsDtoService : ICachedObjectExtensionsDtoServic
LocalizationResource = enumProperty.GetLocalizationResourceNameOrNull()
};
foreach (var enumValue in enumProperty.Type.GetEnumValues())
var enumType = enumProperty.Type.IsEnum
? enumProperty.Type
: TypeHelper.IsNullableEnum(enumProperty.Type)
? Nullable.GetUnderlyingType(enumProperty.Type)
: null;
if (enumType == null)
{
return extensionEnumDto;
}
foreach (var enumValue in enumType.GetEnumValues())
{
extensionEnumDto.Fields.Add(
new ExtensionEnumFieldDto
{
Name = enumProperty.Type.GetEnumName(enumValue)!,
Name = enumType.GetEnumName(enumValue)!,
Value = enumValue
}
);

8
framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.cs

@ -84,6 +84,14 @@ public static class TypeHelper
return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
}
public static bool IsNullableEnum(Type type)
{
return type.IsGenericType &&
type.GetGenericTypeDefinition() == typeof(Nullable<>) &&
type.GenericTypeArguments.Length == 1 &&
type.GenericTypeArguments[0].IsEnum;
}
public static Type GetFirstGenericArgumentIfNullable(this Type t)
{
if (t.GetGenericArguments().Length > 0 && t.GetGenericTypeDefinition() == typeof(Nullable<>))

Loading…
Cancel
Save