namespace InnovEnergy.Lib.Units; public readonly struct State { public IReadOnlyList Values { get; } public State(IReadOnlyList values) { if (values.Any(v => v.Contains(";"))) throw new ArgumentException("State values cannot contain the character ;", nameof(values)); Values = values; } public State(params String[] values) : this((IReadOnlyList)values){} public State(params State[] states) : this(states.SelectMany(s => s.Values).ToList()){} public static implicit operator State(String s) => new State(s); public static implicit operator State(Enum e) => new State(e.ToString()); public static implicit operator State(Boolean s) => new State(s.ToString()); public static State operator |(State left, State right) => new State(left, right); public override String ToString() => String.Join("; ", Values); }