Forge.Extensions.Optional 0.1.0-beta.2

This is a prerelease version of Forge.Extensions.Optional.
dotnet add package Forge.Extensions.Optional --version 0.1.0-beta.2
NuGet\Install-Package Forge.Extensions.Optional -Version 0.1.0-beta.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Forge.Extensions.Optional" Version="0.1.0-beta.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Forge.Extensions.Optional --version 0.1.0-beta.2
#r "nuget: Forge.Extensions.Optional, 0.1.0-beta.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Forge.Extensions.Optional as a Cake Addin
#addin nuget:?package=Forge.Extensions.Optional&version=0.1.0-beta.2&prerelease

// Install Forge.Extensions.Optional as a Cake Tool
#tool nuget:?package=Forge.Extensions.Optional&version=0.1.0-beta.2&prerelease

ReForge.Optional

GitHub License NuGet Version

⚠️ This project is in the early stages of development and should be used with caution. It is currently slower, uses more memory and is less feature-rich than other libraries for implementing Discriminated Unions in C#. Please consider using OneOf for production use.

ReForge.Optional is a minimal discriminated union for C# that provides a simple and intuitive way to represent optional values. It is intended for use in projects that require a lightweight and easy-to-use library for working with optional values.

Alternatives

OneOf is a mature and widely used library for implementing Discriminated Unions in C#. This is the preferred choice for most projects.

Installation

To use ReForge.Optional in your project, add it as a reference.

Usage

Here are some examples of how to use the Optional<T> class:

Creating an Optional

int value = 5;
var optional = Optional<int>.Of(value);

Creating an Optional with an Exception

var exception = new Exception("Test exception");
var optional = Optional<int>.OfException(exception);

Mapping an Optional

var optional = Optional<int>.Of(5);
Func<int, string> mapper = i => i.ToString();
var result = optional.Map(mapper);

Binding an Optional

var optional = Optional<int>.Of(5);
Func<int, Optional<string>> binder = i => Optional<string>.Of(i.ToString());
var result = optional.Bind(binder);

Using OrElse

var exception = new Exception("Test exception");
var optional = Optional<int>.OfException(exception);
var result = optional.OrElse(10);

Using OrElseThrow

var exception = new Exception("Test exception");
var optional = Optional<int>.OfException(exception);
Exception? actualException = Assert.Throws<Exception>(() => optional.OrElseThrow());

Using TryCreate

var exception = new Exception("Test exception");
Func<Optional<int>> func = () => throw exception;
var result = Optional<int>.TryCreate(func);

Contributing

Contributions are welcome. Please open an issue or submit a pull request.

License

This project is licensed under the MIT License.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.1

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.1.0-beta.2 66 3/26/2024

Initial beta release of Forge.Extensions.Optional.