ComradeVanti.CSharpTools.Opt
3.0.0
dotnet add package ComradeVanti.CSharpTools.Opt --version 3.0.0
NuGet\Install-Package ComradeVanti.CSharpTools.Opt -Version 3.0.0
<PackageReference Include="ComradeVanti.CSharpTools.Opt" Version="3.0.0" />
paket add ComradeVanti.CSharpTools.Opt --version 3.0.0
#r "nuget: ComradeVanti.CSharpTools.Opt, 3.0.0"
// Install ComradeVanti.CSharpTools.Opt as a Cake Addin #addin nuget:?package=ComradeVanti.CSharpTools.Opt&version=3.0.0 // Install ComradeVanti.CSharpTools.Opt as a Cake Tool #tool nuget:?package=ComradeVanti.CSharpTools.Opt&version=3.0.0
opt
A C# library that mimics F#'s optionals. Since the functionality and in most
cases even the method names are directly taken from F#, go check
out the documentation there
for details.
Features
Methods for creating optionals are located on the Opt
class. Methods
like Map
or Bind
are available as extension methods on IOpt
instances for
easy chaining.
IOpt
are immutable reference-types. Comparing them with Equals
will be true
if the both contain a value and those values are equal. Comparing IOpt
with ==
will compare them using reference equality.
IOpt
implements IEnumerable
and supports Linq extensions such
as Contains
, Count
, Any
and ToArray
as well as use in foreach
statements.
Optional instantiation
Some
Creates a present optionalNone
Creates a missing optionalFromNullable
Creates an optional from a nullable, which will be missing if the given value is nullFromOp
Creates an optional from an operation that might fail (throw an exception)
Optional extension methods
IsSome
Checks if the optional is presentIsNone
Checks if the optional is missingGet
Attempts to get the value from the optional and throws an exception if the value is missingDefaultValue
Gets the value from this optional or a replacement if it is missingMap
Maps an optional from one type to another using a mapping-functionBind
Maps an optional from one type to another using a mapping-function which itself produces an optionalMatch
Executes either a onSome or onNone action depending on if the optional is presentIter
Executes the given action if the optional is present, passing in the contained valueDefaultWith
Gets the value or the result of the replacement-function if it is missingFilter
Filters the optional with a predicateFlatten
Collapses a nested optional into a flat oneFold
/FoldBack
Executes a folder-function with the value if presentForAll
Checks if the value in the optional satisfies a predicate. Returns true if the optional is missing
Pattern matching
You can
use C# pattern-matching
on IOpt
instances to check if they have a value or not.
For example:
switch (x) // Where x is an IOpt<int>
{
case ISome<int> { Value: var value}: // value is an int
break;
case INone<int> :
break;
}
Utility extensions
Opt also includes some utility extensions for existing types
IDictionary
TryGet
Attempts to get a value from the dictionary
IEnumerable
TryFirst
Attempts to get the first element from the sequenceTryLast
Attempts to get the last element from the sequenceTryElementAt
Attempts to get an element from the sequence by its indexChoose
Selects and maps all items in the sequence where the given choose function returned someTryFind
Attempts to get the first item in the sequence for which the given predicate holdsTryFindBack
Attempts to get the last item in the sequence for which the given predicate holdsCollect
Collects a sequence of optionalsTrySingle
Attempts to get the only item in this collectionFilterSome
Filters out any missing values and returns only the present onesTryMax
Attempts to get the maximum element from the collectionTryMin
Attempts to get the minimum element from the collectionTryMaxBy
Attempts to get the maximum element from the collection according to a selector functionTryMinBy
Attempts to get the minimum element from the collection according to a selector function
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. 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 was computed. 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 | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 is compatible. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETCoreApp 3.1
- No dependencies.
-
.NETStandard 2.0
- No dependencies.
-
.NETStandard 2.1
- No dependencies.
-
net5.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.