enum selector support natvie aot
This commit is contained in:
@@ -130,6 +130,35 @@ public class EnumSelector: TemplatedControl
|
|||||||
Values = GenerateItemTuple();
|
Values = GenerateItemTuple();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// netstandard 2.0 does not support Enum.GetValuesAsUnderlyingType, which is used for native aot compilation
|
||||||
|
#if NET8_0_OR_GREATER
|
||||||
|
private List<EnumItemTuple> GenerateItemTuple()
|
||||||
|
{
|
||||||
|
if (EnumType is null) return new List<EnumItemTuple>();
|
||||||
|
var values = Enum.GetValuesAsUnderlyingType(EnumType);
|
||||||
|
List<EnumItemTuple> list = new();
|
||||||
|
foreach (var value in values)
|
||||||
|
{
|
||||||
|
// value is underlying type like int/byte/short
|
||||||
|
var enumValue = Enum.ToObject(EnumType, value);
|
||||||
|
var displayName = Enum.GetName(EnumType, value);
|
||||||
|
if(displayName is null) continue;
|
||||||
|
var field = EnumType.GetField(displayName);
|
||||||
|
var description = field?.GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault();
|
||||||
|
if (description is not null)
|
||||||
|
{
|
||||||
|
displayName = ((DescriptionAttribute) description).Description;
|
||||||
|
}
|
||||||
|
list.Add(new EnumItemTuple()
|
||||||
|
{
|
||||||
|
DisplayName = displayName,
|
||||||
|
Value = enumValue
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
#else
|
||||||
private List<EnumItemTuple> GenerateItemTuple()
|
private List<EnumItemTuple> GenerateItemTuple()
|
||||||
{
|
{
|
||||||
if (EnumType is null) return new List<EnumItemTuple>();
|
if (EnumType is null) return new List<EnumItemTuple>();
|
||||||
@@ -157,4 +186,5 @@ public class EnumSelector: TemplatedControl
|
|||||||
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user