Browse Source
Return `EnumValues` for `nullable enum`.
pull/21675/head
maliming
2 years ago
No known key found for this signature in database
GPG Key ID: A646B9CB645ECEA4
2 changed files with
22 additions and
3 deletions
-
framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/ApplicationConfigurations/ObjectExtending/CachedObjectExtensionsDtoService.cs
-
framework/src/Volo.Abp.Core/Volo/Abp/Reflection/TypeHelper.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 |
|
|
|
} |
|
|
|
); |
|
|
|
|
|
|
|
@ -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<>)) |
|
|
|
|