public static void Main()
OptionalValue2<float> myFloat = new();
Console.WriteLine($"myFloat HasValue: {myFloat.HasValue}, Value: {myFloat.Value}");
Console.WriteLine($"myFloat HasValue: {myFloat.HasValue}, Value: {myFloat.Value}");
OptionalValue<MyClass> myClass = new();
myClass.Value = new MyClass();
Console.WriteLine($"myClass HasValue: {myClass.HasValue}, Value: {myClass.Value}");
Console.WriteLine($"myClass HasValue: {myClass.HasValue}, Value: {myClass.Value}");
public interface IOptionalValue<T>{
Type ValueType => typeof(T);
bool HasValue => Value != null;
public class OptionalValue<T> : IOptionalValue<T> where T : class
public class OptionalValue2<T> : IOptionalValue<T> where T : struct