BITFALL/Assets/BITKit/Core/Optional/Optional.cs

50 lines
1020 B
C#
Raw Normal View History

2023-08-12 01:43:24 +08:00
namespace BITKit
{
public interface IOptional
{
bool Allow { get; }
object Value { get; }
}
public interface IOptional<T>
{
2023-10-02 23:24:56 +08:00
bool Allow { get; set; }
T Value { get; set; }
2023-08-12 01:43:24 +08:00
}
[System.Serializable]
2023-10-02 23:24:56 +08:00
public class Optional<T> : IOptional<T>
2023-08-12 01:43:24 +08:00
{
2023-08-23 01:59:40 +08:00
#if NET5_0_OR_GREATER
2023-08-12 01:43:24 +08:00
bool allow;
T value;
#else
2023-08-23 01:59:40 +08:00
[UnityEngine.SerializeField]
2023-08-12 01:43:24 +08:00
bool allow;
2023-08-23 01:59:40 +08:00
[UnityEngine.SerializeField]
2023-08-12 01:43:24 +08:00
T value;
#endif
public bool Allow { get => allow; set => allow = value;}
2023-10-02 23:24:56 +08:00
public T Value
{
get => value;
set=>this.value=value;
}
public void SetValueThenAllow(T newValue)
{
value = newValue;
allow = true;
}
2023-08-12 01:43:24 +08:00
public void Clear()
{
Allow = false;
value = default;
}
public static implicit operator T(Optional<T> self)
{
return self.value;
}
}
}