Skip to content

Provides utility type Option<T> for optional value handling

License

Notifications You must be signed in to change notification settings

2chevskii/optional

Repository files navigation

Dvchevskii.Option

Provides utility type Option<T> for optional value handling

Installation

Package manager console

Install-Package Dvchevskii.Optional

.NET CLI

dotnet add package Dvchevskii.Optional

Usage

Create an Option<T> from T value

Option<int> option = Option.Some(42);
Assert.IsTrue(option.IsSome());

Create an empty Option<T>

Option<int> option = Option.None<int>();
Assert.IsTrue(option.IsNone());

Mapping

string MapOption(Option<int> option)
{
  return option.MapOrElse(
    value => $"I have value: {value}",
    () => "I have no value =("
  );
}

Assert.AreEqual(
  MapOption(Option.Some(42)),
  "I have value: 42"
);

Assert.AreEqual(
  MapOption(Option.None<int>()),
  "I have no value =("
);

Pattern matching

int PatternMatchOption<T>(Option<T> option) =>
  option switch {
    ISome => 42,
    INone => 69
  };

bool IsOptionSome<T>(Option<T> option) => option is ISome;