diff --git a/Avalonia.sln b/Avalonia.sln
index 8e94eb4e63..1f59a94e2e 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -38,8 +38,8 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{A689DEF5-D50F-4975-8B72-124C9EB54066}"
ProjectSection(SolutionItems) = preProject
.editorconfig = .editorconfig
+ src\Shared\EnumParserHelper.cs = src\Shared\EnumParserHelper.cs
src\Shared\ModuleInitializer.cs = src\Shared\ModuleInitializer.cs
- src\Shared\RawEventGrouping.cs = src\Shared\RawEventGrouping.cs
src\Shared\SourceGeneratorAttributes.cs = src\Shared\SourceGeneratorAttributes.cs
EndProjectSection
EndProject
diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj
index 8e4755b4b7..f0d54d831a 100644
--- a/src/Avalonia.Base/Avalonia.Base.csproj
+++ b/src/Avalonia.Base/Avalonia.Base.csproj
@@ -7,6 +7,7 @@
+
diff --git a/src/Avalonia.Base/Input/KeyGesture.cs b/src/Avalonia.Base/Input/KeyGesture.cs
index 6f302a3ae7..d7fe89afda 100644
--- a/src/Avalonia.Base/Input/KeyGesture.cs
+++ b/src/Avalonia.Base/Input/KeyGesture.cs
@@ -155,11 +155,7 @@ namespace Avalonia.Input
if (s_keySynonyms.TryGetValue(key.ToLower(), out Key rv))
return rv;
-#if NETSTANDARD2_0
- return (Key)Enum.Parse(typeof(Key), key, true);
-#else
- return Enum.Parse(key, true);
-#endif
+ return EnumParserHelper.ParseEnum(key, true);
}
private static KeyModifiers ParseModifier(ReadOnlySpan modifier)
@@ -176,11 +172,7 @@ namespace Avalonia.Input
return KeyModifiers.Meta;
}
-#if NETSTANDARD2_0
- return (KeyModifiers)Enum.Parse(typeof(KeyModifiers), modifier.ToString(), true);
-#else
- return Enum.Parse(modifier.ToString(), true);
-#endif
+ return EnumParserHelper.ParseEnum(modifier.ToString(), true);
}
private Key ResolveNumPadOperationKey(Key key)
diff --git a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
index 0270000d8c..66a7a6389e 100644
--- a/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
+++ b/src/Avalonia.DesignerSupport/Avalonia.DesignerSupport.csproj
@@ -19,6 +19,7 @@
+
diff --git a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs
index 7965e5d0d8..11a1efb9c7 100644
--- a/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs
+++ b/src/Avalonia.DesignerSupport/Remote/HtmlTransport/HtmlTransport.cs
@@ -320,23 +320,13 @@ namespace Avalonia.DesignerSupport.Remote.HtmlTransport
? null
: modifiersText
.Split(',')
-#if NETSTANDARD2_0
- .Select(x => (InputProtocol.InputModifiers)Enum.Parse(
- typeof(InputProtocol.InputModifiers), x, true))
-#else
- .Select(x => Enum.Parse(x, true))
-#endif
+ .Select(x => EnumParserHelper.ParseEnum(x, true))
.ToArray();
private static InputProtocol.MouseButton ParseMouseButton(string buttonText) =>
string.IsNullOrWhiteSpace(buttonText)
? InputProtocol.MouseButton.None
-#if NETSTANDARD2_0
- : (InputProtocol.MouseButton)Enum.Parse(
- typeof(InputProtocol.MouseButton), buttonText, true);
-#else
- : Enum.Parse(buttonText, true);
-#endif
+ : EnumParserHelper.ParseEnum(buttonText, true);
private static double ParseDouble(string text) =>
double.Parse(text, NumberStyles.Float, CultureInfo.InvariantCulture);
diff --git a/src/Shared/EnumParserHelper.cs b/src/Shared/EnumParserHelper.cs
new file mode 100644
index 0000000000..09d6a0cb7d
--- /dev/null
+++ b/src/Shared/EnumParserHelper.cs
@@ -0,0 +1,19 @@
+using System;
+
+namespace Avalonia
+{
+ internal class EnumParserHelper
+ {
+#if NET6_0
+ public static T ParseEnum(ReadOnlySpan key, bool ignoreCase) where T : struct
+ {
+ return Enum.Parse(key, ignoreCase);
+ }
+#else
+ public static T ParseEnum(string key, bool ignoreCase) where T : struct
+ {
+ return (T)Enum.Parse(typeof(T), key, ignoreCase);
+ }
+#endif
+ }
+}