From eadde25034b6c540b8f8b1e57ec67efacb479c3a Mon Sep 17 00:00:00 2001 From: tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:50:39 +0300 Subject: [PATCH 1/3] Add Enum.ParseOrNull/ParseOrDefault --- .../Extensions/EnumExtensionsTests.cs | 36 ++++++++++++++ PowerKit/Extensions/EnumExtensions.cs | 47 +++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 PowerKit.Tests/Extensions/EnumExtensionsTests.cs create mode 100644 PowerKit/Extensions/EnumExtensions.cs diff --git a/PowerKit.Tests/Extensions/EnumExtensionsTests.cs b/PowerKit.Tests/Extensions/EnumExtensionsTests.cs new file mode 100644 index 0000000..f5e06c5 --- /dev/null +++ b/PowerKit.Tests/Extensions/EnumExtensionsTests.cs @@ -0,0 +1,36 @@ +using FluentAssertions; +using PowerKit.Extensions; +using Xunit; + +namespace PowerKit.Tests.Extensions; + +file enum TestEnum +{ + Foo, + Bar, +} + +public class EnumExtensionsTests +{ + [Fact] + public void ParseOrNull_Test() + { + // Act & assert + Enum.ParseOrNull("Foo").Should().Be(TestEnum.Foo); + Enum.ParseOrNull("foo").Should().BeNull(); + Enum.ParseOrNull("foo", true).Should().Be(TestEnum.Foo); + Enum.ParseOrNull("invalid").Should().BeNull(); + Enum.ParseOrNull(null).Should().BeNull(); + } + + [Fact] + public void ParseOrDefault_Test() + { + // Act & assert + Enum.ParseOrDefault("Foo").Should().Be(TestEnum.Foo); + Enum.ParseOrDefault("foo").Should().Be(default); + Enum.ParseOrDefault("foo", true).Should().Be(TestEnum.Foo); + Enum.ParseOrDefault("invalid", TestEnum.Bar).Should().Be(TestEnum.Bar); + Enum.ParseOrDefault(null, TestEnum.Bar).Should().Be(TestEnum.Bar); + } +} diff --git a/PowerKit/Extensions/EnumExtensions.cs b/PowerKit/Extensions/EnumExtensions.cs new file mode 100644 index 0000000..ad93617 --- /dev/null +++ b/PowerKit/Extensions/EnumExtensions.cs @@ -0,0 +1,47 @@ +#nullable enable +using System; +using System.Diagnostics.CodeAnalysis; + +namespace PowerKit.Extensions; + +#if !POWERKIT_INCLUDE_COVERAGE +[ExcludeFromCodeCoverage] +#endif +internal static class EnumExtensions +{ + extension(Enum) + { + /// + /// Parses the string as an enum value of type , + /// returning if parsing fails. + /// + public static TEnum? ParseOrNull(string? str, bool ignoreCase) + where TEnum : struct, Enum => + Enum.TryParse(str, ignoreCase, out var result) ? result : null; + + /// + /// Parses the string as an enum value of type , + /// returning if parsing fails. + /// + public static TEnum? ParseOrNull(string? str) + where TEnum : struct, Enum => Enum.ParseOrNull(str, false); + + /// + /// Parses the string as an enum value of type , + /// returning if parsing fails. + /// + public static TEnum ParseOrDefault( + string? str, + bool ignoreCase, + TEnum defaultValue = default + ) + where TEnum : struct, Enum => Enum.ParseOrNull(str, ignoreCase) ?? defaultValue; + + /// + /// Parses the string as an enum value of type , + /// returning if parsing fails. + /// + public static TEnum ParseOrDefault(string? str, TEnum defaultValue = default) + where TEnum : struct, Enum => Enum.ParseOrDefault(str, false, defaultValue); + } +} From d98fa3d506ba2ebc07d77207e0599258f90e98f8 Mon Sep 17 00:00:00 2001 From: tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:52:03 +0300 Subject: [PATCH 2/3] asd --- PowerKit.Tests/Extensions/EnumExtensionsTests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/PowerKit.Tests/Extensions/EnumExtensionsTests.cs b/PowerKit.Tests/Extensions/EnumExtensionsTests.cs index f5e06c5..75f608e 100644 --- a/PowerKit.Tests/Extensions/EnumExtensionsTests.cs +++ b/PowerKit.Tests/Extensions/EnumExtensionsTests.cs @@ -1,3 +1,4 @@ +using System; using FluentAssertions; using PowerKit.Extensions; using Xunit; From 58097973bd8a3ddfe743912b6e360b41e1e478a2 Mon Sep 17 00:00:00 2001 From: tyrrrz <1935960+Tyrrrz@users.noreply.github.com> Date: Sun, 19 Apr 2026 21:52:18 +0300 Subject: [PATCH 3/3] asd --- PowerKit.Tests/Extensions/EnumExtensionsTests.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PowerKit.Tests/Extensions/EnumExtensionsTests.cs b/PowerKit.Tests/Extensions/EnumExtensionsTests.cs index 75f608e..6dffaf1 100644 --- a/PowerKit.Tests/Extensions/EnumExtensionsTests.cs +++ b/PowerKit.Tests/Extensions/EnumExtensionsTests.cs @@ -31,7 +31,7 @@ public void ParseOrDefault_Test() Enum.ParseOrDefault("Foo").Should().Be(TestEnum.Foo); Enum.ParseOrDefault("foo").Should().Be(default); Enum.ParseOrDefault("foo", true).Should().Be(TestEnum.Foo); - Enum.ParseOrDefault("invalid", TestEnum.Bar).Should().Be(TestEnum.Bar); - Enum.ParseOrDefault(null, TestEnum.Bar).Should().Be(TestEnum.Bar); + Enum.ParseOrDefault("invalid", TestEnum.Bar).Should().Be(TestEnum.Bar); + Enum.ParseOrDefault(null, TestEnum.Bar).Should().Be(TestEnum.Bar); } }