Added HasValue and ifSome/None, and Member not null; for Option.Value
All checks were successful
Build NuGet / build (push) Successful in 40s

This commit is contained in:
2026-08-07 13:12:31 -04:00
parent 262b76c4d5
commit 6ba5d248f8
2 changed files with 24 additions and 0 deletions

View File

@@ -20,6 +20,7 @@ public readonly struct Option<T> : IOption<T>,
public T? Value => _value; public T? Value => _value;
[MemberNotNullWhen(true, nameof(HasValue), nameof(_value))] [MemberNotNullWhen(true, nameof(HasValue), nameof(_value))]
[MemberNotNullWhen(true, nameof(HasValue), nameof(Value))]
public bool HasValue {get;init;} public bool HasValue {get;init;}
public static Option<T> Some(T value) => new Option<T>(value, true); public static Option<T> Some(T value) => new Option<T>(value, true);

View File

@@ -1,5 +1,7 @@
using System.Diagnostics; using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.Numerics; using System.Numerics;
using Microsoft.VisualBasic;
namespace SJK.Functional; namespace SJK.Functional;
@@ -97,6 +99,27 @@ public static partial class OptionExtensions
} }
return Option<T>.None; return Option<T>.None;
} }
public static bool HasValue<T>(this Option<T> option,[NotNullWhen(true)] out T result)
{
result = option.Value!;
return option.HasValue;
}
public static bool IfSome<T>(this Option<T> option, Action<T> action)
{
if (option.HasValue)
{
action(option.Value);
}
return option.HasValue;
}
public static bool IfNone<T>(this Option<T> option, Action action)
{
if (!option.HasValue)
{
action();
}
return !option.HasValue;
}
public static Option<T> ToOption<T>(this T? value) => value is null ? Option<T>.None : Option<T>.Some(value); public static Option<T> ToOption<T>(this T? value) => value is null ? Option<T>.None : Option<T>.Some(value);