PkmnLibRSharp/PkmnLibRSharp/Utils/Optional.cs

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
}
}
}