diff --git a/src/ImageSharp/Common/Helpers/EnumUtils.cs b/src/ImageSharp/Common/Helpers/EnumUtils.cs
index d6bead6408..a598411629 100644
--- a/src/ImageSharp/Common/Helpers/EnumUtils.cs
+++ b/src/ImageSharp/Common/Helpers/EnumUtils.cs
@@ -19,15 +19,14 @@ internal static class EnumUtils
/// The default value to return.
/// The .
public static TEnum Parse(int value, TEnum defaultValue)
- where TEnum : Enum
+ where TEnum : struct, Enum
{
- foreach (TEnum enumValue in Enum.GetValues(typeof(TEnum)))
+ DebugGuard.IsTrue(Unsafe.SizeOf() == sizeof(int), "Only int-sized enums are supported.");
+
+ TEnum valueEnum = Unsafe.As(ref value);
+ if (Enum.IsDefined(valueEnum))
{
- TEnum current = enumValue;
- if (value == Unsafe.As(ref current))
- {
- return enumValue;
- }
+ return valueEnum;
}
return defaultValue;
@@ -41,8 +40,10 @@ public static TEnum Parse(int value, TEnum defaultValue)
/// The flag.
/// The .
public static bool HasFlag(TEnum value, TEnum flag)
- where TEnum : Enum
+ where TEnum : struct, Enum
{
+ DebugGuard.IsTrue(Unsafe.SizeOf() == sizeof(int), "Only int-sized enums are supported.");
+
uint flagValue = Unsafe.As(ref flag);
return (Unsafe.As(ref value) & flagValue) == flagValue;
}