39 lines
833 B
C#
39 lines
833 B
C#
using System;
|
|
|
|
namespace PkmnLibSharp.Utils
|
|
{
|
|
public struct Optional<T> : IDisposable
|
|
where T: IDisposable
|
|
{
|
|
public T? Value;
|
|
public bool HasValue;
|
|
|
|
private Optional(T? value, bool hasValue)
|
|
{
|
|
Value = value;
|
|
HasValue = hasValue;
|
|
}
|
|
|
|
public static implicit operator Optional<T>(T value)
|
|
{
|
|
return new Optional<T>(value, true);
|
|
}
|
|
|
|
public static implicit operator T(Optional<T> value)
|
|
{
|
|
return value.Value!;
|
|
}
|
|
|
|
public static Optional<T> None()
|
|
{
|
|
return new Optional<T>(default, false);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
#pragma warning disable IDISP007
|
|
Value?.Dispose();
|
|
#pragma warning restore IDISP007
|
|
}
|
|
}
|
|
} |