public readonly struct Value
{
public string? StringValue { get; } = null;
public double? NumberValue { get; } = null;
public ValueKind Kind { get; }
public bool IsUndefined => Kind == ValueKind.Undefined;
[MemberNotNullWhen(true, nameof(StringValue))]
public bool IsString => Kind == ValueKind.String;
[MemberNotNulWhen(true, nameof(NumberValue))]
public bool IsNumber => Kind == ValueKind.Number;
public Value()
{
Kind = ValueKind.Undefined;
}
public Value(string value)
{
StringValue = value;
Kind = ValueKind.String;
}
public Value(double value)
{
NumberValue = value;
Kind = ValueKind.Number;
}
}
public enum ValueKind
{
Undefined,
String,
Number
}
public readonly struct Value
{
public string? StringValue { get; } = null;
public double? NumberValue { get; } = null;
public ValueKind Kind { get; }
public bool IsUndefined => Kind == ValueKind.Undefined;
[MemberNotNullWhen(true, nameof(StringValue))]
public bool IsString => Kind == ValueKind.String;
[MemberNotNulWhen(true, nameof(NumberValue))]
public bool IsNumber => Kind == ValueKind.Number;
public Value()
{
Kind = ValueKind.Undefined;
}
public Value(string value)
{
StringValue = value;
Kind = ValueKind.String;
}
public Value(double value)
{
NumberValue = value;
Kind = ValueKind.Number;
}
}
public enum ValueKind
{
Undefined,
String,
Number
}