Skip to content

Commit 362e5eb

Browse files
committed
Return EnumValues for nullable enum.
1 parent a8e0586 commit 362e5eb

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ protected virtual void FillEnums(ObjectExtensionsDto objectExtensionsDto)
242242
e => e.GetProperties()
243243
)
244244
)
245-
.Where(p => p.Type.IsEnum)
245+
.Where(p => p.Type.IsEnum || TypeHelper.IsNullableEnum(p.Type))
246246
.ToList();
247247

248248
foreach (var enumProperty in enumProperties)
@@ -260,12 +260,23 @@ protected virtual ExtensionEnumDto CreateExtensionEnumDto(ExtensionPropertyConfi
260260
LocalizationResource = enumProperty.GetLocalizationResourceNameOrNull()
261261
};
262262

263-
foreach (var enumValue in enumProperty.Type.GetEnumValues())
263+
var enumType = enumProperty.Type.IsEnum
264+
? enumProperty.Type
265+
: TypeHelper.IsNullableEnum(enumProperty.Type)
266+
? Nullable.GetUnderlyingType(enumProperty.Type)
267+
: null;
268+
269+
if (enumType == null)
270+
{
271+
return extensionEnumDto;
272+
}
273+
274+
foreach (var enumValue in enumType.GetEnumValues())
264275
{
265276
extensionEnumDto.Fields.Add(
266277
new ExtensionEnumFieldDto
267278
{
268-
Name = enumProperty.Type.GetEnumName(enumValue)!,
279+
Name = enumType.GetEnumName(enumValue)!,
269280
Value = enumValue
270281
}
271282
);

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,14 @@ public static bool IsNullable(Type type)
8484
return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
8585
}
8686

87+
public static bool IsNullableEnum(Type type)
88+
{
89+
return type.IsGenericType &&
90+
type.GetGenericTypeDefinition() == typeof(Nullable<>) &&
91+
type.GenericTypeArguments.Length == 1 &&
92+
type.GenericTypeArguments[0].IsEnum;
93+
}
94+
8795
public static Type GetFirstGenericArgumentIfNullable(this Type t)
8896
{
8997
if (t.GetGenericArguments().Length > 0 && t.GetGenericTypeDefinition() == typeof(Nullable<>))

0 commit comments

Comments
 (0)