Struct Optional<T>
A container object which may or may not contain a value.
Inherited Members
Namespace: DotNext
Assembly: DotNext.dll
Syntax
public readonly struct Optional<T> : IEquatable<Optional<T>>, IEquatable<T>, IStructuralEquatable, IOptionMonad<T, Optional<T>>, IOptionMonad<T>, ISupplier<object?>, IFunctional<Func<object?>>
Type Parameters
Name | Description |
---|---|
T | Type of value. |
Constructors
| Edit this page View SourceOptional(T?)
Constructs non-empty container.
Declaration
public Optional(T? value)
Parameters
Type | Name | Description |
---|---|---|
T | value | A value to be placed into container. |
Remarks
The property IsNull
of the constructed object may be true
if value
is null.
The property IsUndefined
of the constructed object is always false.
Properties
| Edit this page View SourceHasValue
Indicates whether the value is present.
Declaration
public bool HasValue { get; }
Property Value
Type | Description |
---|---|
bool |
Remarks
If this property is true then IsUndefined and IsNull equal to false.
IsNull
Indicates that the value is null.
Declaration
public bool IsNull { get; }
Property Value
Type | Description |
---|---|
bool |
Remarks
This property returns true only if this instance was constructed using Optional(T?) with null argument.
IsUndefined
Indicates that the value is undefined.
Declaration
public bool IsUndefined { get; }
Property Value
Type | Description |
---|---|
bool |
See Also
| Edit this page View SourceNone
Represents optional container without value.
Declaration
public static Optional<T> None { get; }
Property Value
Type | Description |
---|---|
Optional<T> |
Remarks
The property IsUndefined of returned object is always true.
Value
If a value is present, returns the value, otherwise throw exception.
Declaration
public T Value { get; }
Property Value
Type | Description |
---|---|
T |
Exceptions
Type | Condition |
---|---|
InvalidOperationException | No value is present. |
ValueOrDefault
If a value is present, returns the value, otherwise default value.
Declaration
public T? ValueOrDefault { get; }
Property Value
Type | Description |
---|---|
T | The value, if present, otherwise default. |
ValueRef
Obtains immutable reference to the value in the container.
Declaration
[JsonIgnore]
public ref readonly T ValueRef { get; }
Property Value
Type | Description |
---|---|
T |
Exceptions
Type | Condition |
---|---|
InvalidOperationException | No value is present. |
Methods
| Edit this page View SourceBox()
Boxes value encapsulated by this object.
Declaration
public Optional<object> Box()
Returns
Type | Description |
---|---|
Optional<object> | The boxed value. |
Convert<TResult>(delegate*<T, Optional<TResult>>)
If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise returns None.
Declaration
[CLSCompliant(false)]
public Optional<TResult> Convert<TResult>(delegate*<T, Optional<TResult>> mapper)
Parameters
Type | Name | Description |
---|---|---|
delegate*<T, Optional<TResult>> | mapper | A mapping function to be applied to the value, if present. |
Returns
Type | Description |
---|---|
Optional<TResult> | An Optional describing the result of applying a mapping function to the value of this Optional, if a value is present, otherwise None. |
Type Parameters
Name | Description |
---|---|
TResult | The type of the result of the mapping function. |
Convert<TResult>(delegate*<T, Optional<TResult>>)
If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise returns None.
Declaration
[CLSCompliant(false)]
public Optional<TResult> Convert<TResult>(delegate*<T, Optional<TResult>> mapper)
Parameters
Type | Name | Description |
---|---|---|
delegate*<T, Optional<TResult>> | mapper | A mapping function to be applied to the value, if present. |
Returns
Type | Description |
---|---|
Optional<TResult> | An Optional describing the result of applying a mapping function to the value of this Optional, if a value is present, otherwise None. |
Type Parameters
Name | Description |
---|---|
TResult | The type of the result of the mapping function. |
Convert<TResult>(Converter<T, Optional<TResult>>)
If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise returns None.
Declaration
public Optional<TResult> Convert<TResult>(Converter<T, Optional<TResult>> mapper)
Parameters
Type | Name | Description |
---|---|---|
Converter<T, Optional<TResult>> | mapper | A mapping function to be applied to the value, if present. |
Returns
Type | Description |
---|---|
Optional<TResult> | An Optional describing the result of applying a mapping function to the value of this Optional, if a value is present, otherwise None. |
Type Parameters
Name | Description |
---|---|
TResult | The type of the result of the mapping function. |
Convert<TResult>(Converter<T, TResult>)
If a value is present, apply the provided mapping function to it, and if the result is non-null, return an Optional describing the result. Otherwise returns None.
Declaration
public Optional<TResult> Convert<TResult>(Converter<T, TResult> mapper)
Parameters
Type | Name | Description |
---|---|---|
Converter<T, TResult> | mapper | A mapping function to be applied to the value, if present. |
Returns
Type | Description |
---|---|
Optional<TResult> | An Optional describing the result of applying a mapping function to the value of this Optional, if a value is present, otherwise None. |
Type Parameters
Name | Description |
---|---|
TResult | The type of the result of the mapping function. |
Equals(Optional<T>)
Determines whether this container stores the same value as other.
Declaration
public bool Equals(Optional<T> other)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | other | Other container to compare. |
Returns
Type | Description |
---|---|
bool | true if this container stores the same value as |
Equals(object?)
Determines whether this container stores the same value as the specified one.
Declaration
public override bool Equals(object? other)
Parameters
Type | Name | Description |
---|---|---|
object | other | Other container to compare. |
Returns
Type | Description |
---|---|
bool | true if this container stores the same value as |
Overrides
| Edit this page View SourceEquals(object?, IEqualityComparer)
Performs equality check between stored value and the specified value using method Equals(object, object).
Declaration
public bool Equals(object? other, IEqualityComparer comparer)
Parameters
Type | Name | Description |
---|---|---|
object | other | Other object to compare with Value. |
IEqualityComparer | comparer | The comparer implementing custom equality check. |
Returns
Type | Description |
---|---|
bool | true if |
Equals(T?)
Determines whether this container stored the same value as the specified value.
Declaration
public bool Equals(T? other)
Parameters
Type | Name | Description |
---|---|---|
T | other | Other value to compare. |
Returns
Type | Description |
---|---|
bool |
GetHashCode()
Computes hash code of the stored value.
Declaration
public override int GetHashCode()
Returns
Type | Description |
---|---|
int | The hash code of the stored value. |
Overrides
Remarks
This method uses EqualityComparer<T> type to get hash code of Value.
GetHashCode(IEqualityComparer)
Computes hash code for the stored value using method GetHashCode(object).
Declaration
public int GetHashCode(IEqualityComparer comparer)
Parameters
Type | Name | Description |
---|---|---|
IEqualityComparer | comparer | The comparer implementing hash code function. |
Returns
Type | Description |
---|---|
int | The hash code of Value. |
GetReference(delegate*<Exception>)
Obtains immutable reference to the value in the container.
Declaration
[CLSCompliant(false)]
public ref readonly T GetReference(delegate*<Exception> exceptionFactory)
Parameters
Type | Name | Description |
---|---|---|
delegate*<Exception> | exceptionFactory | The factory used to produce exception if the container has no value. |
Returns
Type | Description |
---|---|
T | The immutable reference to the value in the container. |
GetReference(Func<Exception>)
Obtains immutable reference to the value in the container.
Declaration
public ref readonly T GetReference(Func<Exception> exceptionFactory)
Parameters
Type | Name | Description |
---|---|---|
Func<Exception> | exceptionFactory | The factory used to produce exception if the container has no value. |
Returns
Type | Description |
---|---|
T | The immutable reference to the value in the container. |
GetReference<TException>()
Obtains immutable reference to the value in the container.
Declaration
public ref readonly T GetReference<TException>() where TException : Exception, new()
Returns
Type | Description |
---|---|
T | The immutable reference to the value in the container. |
Type Parameters
Name | Description |
---|---|
TException | The type of the exception to throw if the optional container has no value. |
If(delegate*<T, bool>)
If a value is present, and the value matches the given predicate, return an Optional describing the value, otherwise return an empty Optional.
Declaration
[CLSCompliant(false)]
public Optional<T> If(delegate*<T, bool> condition)
Parameters
Type | Name | Description |
---|---|---|
delegate*<T, bool> | condition | A predicate to apply to the value, if present. |
Returns
Type | Description |
---|---|
Optional<T> | An Optional describing the value of this Optional if a value is present and the value matches the given predicate, otherwise an empty Optional. |
If(Predicate<T>)
If a value is present, and the value matches the given predicate, return an Optional describing the value, otherwise return an empty Optional.
Declaration
public Optional<T> If(Predicate<T> condition)
Parameters
Type | Name | Description |
---|---|---|
Predicate<T> | condition | A predicate to apply to the value, if present. |
Returns
Type | Description |
---|---|
Optional<T> | An Optional describing the value of this Optional if a value is present and the value matches the given predicate, otherwise an empty Optional. |
IsValueDefined(T?)
Determines whether the object represents meaningful value.
Declaration
public static bool IsValueDefined(T? value)
Parameters
Type | Name | Description |
---|---|---|
T | value | The value to check. |
Returns
Type | Description |
---|---|
bool | true if |
Or(T?)
Returns the value if present; otherwise return default value.
Declaration
public T? Or(T? defaultValue)
Parameters
Type | Name | Description |
---|---|---|
T | defaultValue | The value to be returned if there is no value present. |
Returns
Type | Description |
---|---|
T | The value, if present, otherwise |
OrInvoke(delegate*<T>)
Returns the value if present; otherwise invoke delegate.
Declaration
[CLSCompliant(false)]
public T OrInvoke(delegate*<T> defaultFunc)
Parameters
Type | Name | Description |
---|---|---|
delegate*<T> | defaultFunc | A delegate to be invoked if value is not present. |
Returns
Type | Description |
---|---|
T | The value, if present, otherwise returned from delegate. |
OrInvoke(Func<T>)
Returns the value if present; otherwise invoke delegate.
Declaration
public T OrInvoke(Func<T> defaultFunc)
Parameters
Type | Name | Description |
---|---|---|
Func<T> | defaultFunc | A delegate to be invoked if value is not present. |
Returns
Type | Description |
---|---|
T | The value, if present, otherwise returned from delegate. |
OrThrow(delegate*<Exception>)
If a value is present, returns the value, otherwise throw exception.
Declaration
[CLSCompliant(false)]
public T OrThrow(delegate*<Exception> exceptionFactory)
Parameters
Type | Name | Description |
---|---|---|
delegate*<Exception> | exceptionFactory | Exception factory. |
Returns
Type | Description |
---|---|
T | The value, if present. |
OrThrow(Func<Exception>)
If a value is present, returns the value, otherwise throw exception.
Declaration
public T OrThrow(Func<Exception> exceptionFactory)
Parameters
Type | Name | Description |
---|---|---|
Func<Exception> | exceptionFactory | Exception factory. |
Returns
Type | Description |
---|---|
T | The value, if present. |
OrThrow<TException>()
If a value is present, returns the value, otherwise throw exception.
Declaration
public T OrThrow<TException>() where TException : Exception, new()
Returns
Type | Description |
---|---|
T | The value, if present. |
Type Parameters
Name | Description |
---|---|
TException | Type of exception to throw. |
ToString()
Returns textual representation of this object.
Declaration
public override string? ToString()
Returns
Type | Description |
---|---|
string | The textual representation of this object. |
Overrides
| Edit this page View SourceTryGet(out T)
Attempts to extract value from container if it is present.
Declaration
public bool TryGet(out T value)
Parameters
Type | Name | Description |
---|---|---|
T | value | Extracted value. |
Returns
Type | Description |
---|---|
bool |
TryGet(out T, out bool)
Attempts to extract value from container if it is present.
Declaration
public bool TryGet(out T value, out bool isNull)
Parameters
Type | Name | Description |
---|---|---|
T | value | Extracted value. |
bool | isNull |
Returns
Type | Description |
---|---|
bool |
Operators
| Edit this page View Sourceoperator |(in Optional<T>, in Optional<T>)
Returns non-empty container.
Declaration
public static Optional<T> operator |(in Optional<T> first, in Optional<T> second)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | first | The first container. |
Optional<T> | second | The second container. |
Returns
Type | Description |
---|---|
Optional<T> | The first non-empty container. |
See Also
| Edit this page View Sourceoperator |(in Optional<T>, T?)
Returns the value if present; otherwise return default value.
Declaration
public static T? operator |(in Optional<T> optional, T? defaultValue)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | optional | The optional value. |
T | defaultValue | The value to be returned if there is no value present. |
Returns
Type | Description |
---|---|
T | The value, if present, otherwise |
operator ==(in Optional<T>, in Optional<T>)
Determines whether two containers store the same value.
Declaration
public static bool operator ==(in Optional<T> first, in Optional<T> second)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | first | The first container to compare. |
Optional<T> | second | The second container to compare. |
Returns
Type | Description |
---|---|
bool | true, if both containers store the same value; otherwise, false. |
operator ^(in Optional<T>, in Optional<T>)
Determines whether two containers are empty or have values.
Declaration
public static Optional<T> operator ^(in Optional<T> first, in Optional<T> second)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | first | The first container. |
Optional<T> | second | The second container. |
Returns
Type | Description |
---|---|
Optional<T> | None, if both containers are empty or have values; otherwise, non-empty container. |
explicit operator T(in Optional<T>)
Extracts value stored in the Optional container.
Declaration
public static explicit operator T(in Optional<T> optional)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | optional | The container. |
Returns
Type | Description |
---|---|
T |
Exceptions
Type | Condition |
---|---|
InvalidOperationException | No value is present. |
operator false(in Optional<T>)
Checks whether the container has no value.
Declaration
public static bool operator false(in Optional<T> optional)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | optional | The container to check. |
Returns
Type | Description |
---|---|
bool |
implicit operator Optional<T>(T?)
Wraps value into Optional container.
Declaration
public static implicit operator Optional<T>(T? value)
Parameters
Type | Name | Description |
---|---|---|
T | value | The value to convert. |
Returns
Type | Description |
---|---|
Optional<T> |
operator !=(in Optional<T>, in Optional<T>)
Determines whether two containers store the different values.
Declaration
public static bool operator !=(in Optional<T> first, in Optional<T> second)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | first | The first container to compare. |
Optional<T> | second | The second container to compare. |
Returns
Type | Description |
---|---|
bool | true, if both containers store the different values; otherwise, false. |
operator true(in Optional<T>)
Checks whether the container has value.
Declaration
public static bool operator true(in Optional<T> optional)
Parameters
Type | Name | Description |
---|---|---|
Optional<T> | optional | The container to check. |
Returns
Type | Description |
---|---|
bool |