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" />
<PackageVersion Include="ComradeVanti.CSharpTools.Opt" Version="3.0.0" />
<PackageReference Include="ComradeVanti.CSharpTools.Opt" />
paket add ComradeVanti.CSharpTools.Opt --version 3.0.0
#r "nuget: ComradeVanti.CSharpTools.Opt, 3.0.0"
#:package ComradeVanti.CSharpTools.Opt@3.0.0
#addin nuget:?package=ComradeVanti.CSharpTools.Opt&version=3.0.0
#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
SomeCreates a present optionalNoneCreates a missing optionalFromNullableCreates an optional from a nullable, which will be missing if the given value is nullFromOpCreates an optional from an operation that might fail (throw an exception)
Optional extension methods
IsSomeChecks if the optional is presentIsNoneChecks if the optional is missingGetAttempts to get the value from the optional and throws an exception if the value is missingDefaultValueGets the value from this optional or a replacement if it is missingMapMaps an optional from one type to another using a mapping-functionBindMaps an optional from one type to another using a mapping-function which itself produces an optionalMatchExecutes either a onSome or onNone action depending on if the optional is presentIterExecutes the given action if the optional is present, passing in the contained valueDefaultWithGets the value or the result of the replacement-function if it is missingFilterFilters the optional with a predicateFlattenCollapses a nested optional into a flat oneFold/FoldBackExecutes a folder-function with the value if presentForAllChecks 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
TryGetAttempts to get a value from the dictionary
IEnumerable
TryFirstAttempts to get the first element from the sequenceTryLastAttempts to get the last element from the sequenceTryElementAtAttempts to get an element from the sequence by its indexChooseSelects and maps all items in the sequence where the given choose function returned someTryFindAttempts to get the first item in the sequence for which the given predicate holdsTryFindBackAttempts to get the last item in the sequence for which the given predicate holdsCollectCollects a sequence of optionalsTrySingleAttempts to get the only item in this collectionFilterSomeFilters out any missing values and returns only the present onesTryMaxAttempts to get the maximum element from the collectionTryMinAttempts to get the minimum element from the collectionTryMaxByAttempts to get the maximum element from the collection according to a selector functionTryMinByAttempts 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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.