Я предлагаю решение с двумя разными полями для значений. Таким образом, мы избегаем упаковки и распаковки, когда значение удваивается. Он менее лаконичен c и требует ручной проверки поля Тип, но сохраняет ресурсы при использовании двойного типа
public class Operand
{
/// <summary> Possible types of operand </summary>
public enum TYPE
{
/// <summary> Number </summary>
Numeric,
/// <summary> Parameter </summary>
Parameter,
/// <summary> Invalid </summary>
None
}
/// <summary> Type of operand </summary>
public TYPE Type { private set; get; } = TYPE.None;
public string StringValue { private set; get; }
public double DoubleValue { private set; get; }
/// <summary> Set the parametric operand </summary>
public void Set(string value)
{
StringValue = value;
Type = TYPE.Parameter;
}
/// <summary> Set the numeric operand </summary>
public void Set(double value)
{
DoubleValue = value;
Type = TYPE.Numeric;
}
}