Class OneOf<T1, T2, T3>
- Namespace
- REslava.Result.AdvancedPatterns
- Assembly
- REslava.Result.dll
Represents a value that can be one of three possible types. A type-safe discriminated union for functional programming patterns.
public sealed class OneOf<T1, T2, T3> : OneOfBase<T1, T2, T3>, IOneOf<T1, T2, T3>, IEquatable<OneOf<T1, T2, T3>>
Type Parameters
T1The first possible type.
T2The second possible type.
T3The third possible type.
- Inheritance
-
OneOfBase<T1, T2, T3>OneOf<T1, T2, T3>
- Implements
-
IOneOf<T1, T2, T3>IEquatable<OneOf<T1, T2, T3>>
- Inherited Members
- Extension Methods
Remarks
OneOf<T1, T2, T3> provides a type-safe way to represent a value that can be one of three types. This is useful for scenarios where you need to handle different types of values or states without using null references, exceptions, or complex enums.
Common use cases include: - API responses with three states: Success, ClientError, ServerError - Configuration values: String, Integer, Boolean - Database operations: Created, Updated, Deleted
OneOf<SuccessData, ClientError, ServerError> response = await CallApi();
return response.Match(
case1: data => ProcessData(data),
case2: clientError => HandleClientError(clientError),
case3: serverError => HandleServerError(serverError)
);
Methods
BindT2<TNewT2>(Func<T2, OneOf<T1, TNewT2, T3>>)
Binds the T2 value if present, otherwise propagates other types.
public OneOf<T1, TNewT2, T3> BindT2<TNewT2>(Func<T2, OneOf<T1, TNewT2, T3>> binder)
Parameters
Returns
- OneOf<T1, TNewT2, T3>
Type Parameters
TNewT2
Exceptions
- ArgumentNullException
Thrown when binder is null.
BindT3<TNewT3>(Func<T3, OneOf<T1, T2, TNewT3>>)
Binds the T3 value if present, otherwise propagates other types.
public OneOf<T1, T2, TNewT3> BindT3<TNewT3>(Func<T3, OneOf<T1, T2, TNewT3>> binder)
Parameters
Returns
- OneOf<T1, T2, TNewT3>
Type Parameters
TNewT3
Exceptions
- ArgumentNullException
Thrown when binder is null.
Equals(OneOf<T1, T2, T3>?)
Determines equality between two OneOf instances.
public bool Equals(OneOf<T1, T2, T3>? other)
Parameters
otherOneOf<T1, T2, T3>
Returns
Equals(object?)
Determines whether the specified object is equal to the current object.
public override bool Equals(object? obj)
Parameters
objobjectThe object to compare with the current object.
Returns
FromT1(T1)
Creates a OneOf containing a T1 value.
public static OneOf<T1, T2, T3> FromT1(T1 value)
Parameters
valueT1
Returns
- OneOf<T1, T2, T3>
FromT2(T2)
Creates a OneOf containing a T2 value.
public static OneOf<T1, T2, T3> FromT2(T2 value)
Parameters
valueT2
Returns
- OneOf<T1, T2, T3>
FromT3(T3)
Creates a OneOf containing a T3 value.
public static OneOf<T1, T2, T3> FromT3(T3 value)
Parameters
valueT3
Returns
- OneOf<T1, T2, T3>
GetHashCode()
Serves as the default hash function.
public override int GetHashCode()
Returns
- int
A hash code for the current object.
MapT2<TNewT2>(Func<T2, TNewT2>)
Maps the T2 value if present, otherwise propagates other types.
public OneOf<T1, TNewT2, T3> MapT2<TNewT2>(Func<T2, TNewT2> mapper)
Parameters
mapperFunc<T2, TNewT2>
Returns
- OneOf<T1, TNewT2, T3>
Type Parameters
TNewT2
Exceptions
- ArgumentNullException
Thrown when mapper is null.
MapT3<TNewT3>(Func<T3, TNewT3>)
Maps the T3 value if present, otherwise propagates other types.
public OneOf<T1, T2, TNewT3> MapT3<TNewT3>(Func<T3, TNewT3> mapper)
Parameters
mapperFunc<T3, TNewT3>
Returns
- OneOf<T1, T2, TNewT3>
Type Parameters
TNewT3
Exceptions
- ArgumentNullException
Thrown when mapper is null.
Operators
operator ==(OneOf<T1, T2, T3>?, OneOf<T1, T2, T3>?)
Equality operator for OneOf instances.
public static bool operator ==(OneOf<T1, T2, T3>? left, OneOf<T1, T2, T3>? right)
Parameters
Returns
implicit operator OneOf<T1, T2, T3>(T1)
Implicit conversion from T1 to OneOf<T1, T2, T3>.
public static implicit operator OneOf<T1, T2, T3>(T1 value)
Parameters
valueT1
Returns
- OneOf<T1, T2, T3>
implicit operator OneOf<T1, T2, T3>(T2)
Implicit conversion from T2 to OneOf<T1, T2, T3>.
public static implicit operator OneOf<T1, T2, T3>(T2 value)
Parameters
valueT2
Returns
- OneOf<T1, T2, T3>
implicit operator OneOf<T1, T2, T3>(T3)
Implicit conversion from T3 to OneOf<T1, T2, T3>.
public static implicit operator OneOf<T1, T2, T3>(T3 value)
Parameters
valueT3
Returns
- OneOf<T1, T2, T3>
operator !=(OneOf<T1, T2, T3>?, OneOf<T1, T2, T3>?)
Inequality operator for OneOf instances.
public static bool operator !=(OneOf<T1, T2, T3>? left, OneOf<T1, T2, T3>? right)