BITKit/Packages/Core/Optional/Optional.cs

46 lines
1023 B
C#
Raw Normal View History

2023-06-05 19:57:17 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BITKit
{
public interface IOptional
{
bool Allow { get; }
object Value { get; }
}
public interface IOptional<T>
{
bool Allow { get; }
T Value { get; }
}
[System.Serializable]
public record Optional<T> : IOptional<T>
{
#if UNITY
[UnityEngine.SerializeField]
bool allow;
[UnityEngine.SerializeField]
T value;
#else
bool allow;
T value;
#endif
public bool Allow { get => allow; set => allow = value;}
public T Value { get => value; set => this.value = value; }
public void SetValueThenAllow(T newValue) => value = newValue;
public void Clear()
{
Allow = false;
value = default;
}
2023-06-07 18:38:07 +08:00
public static implicit operator T(Optional<T> self)
{
return self.value;
}
2023-06-05 19:57:17 +08:00
}
}