diff --git a/csharp/Lib/Units/State.cs b/csharp/Lib/Units/State.cs index 3e8e48395..88610517c 100644 --- a/csharp/Lib/Units/State.cs +++ b/csharp/Lib/Units/State.cs @@ -34,4 +34,11 @@ public readonly struct State : IReadOnlyList public Int32 Count => Values.Count; public String this[Int32 index] => Values[index]; -} \ No newline at end of file + + public static State From(T t) where T : Enum + { + return new State(t); + } +} + + diff --git a/csharp/Lib/Units/StateOfT.cs b/csharp/Lib/Units/StateOfT.cs new file mode 100644 index 000000000..4a1242dc2 --- /dev/null +++ b/csharp/Lib/Units/StateOfT.cs @@ -0,0 +1,27 @@ +using System.Collections; + +namespace InnovEnergy.Lib.Units; + +public readonly struct State : IReadOnlyList where T:Enum +{ + public IReadOnlyList Values { get; } + + public State(IReadOnlyList values) => Values = values; + + public State(params T[] values) : this((IReadOnlyList)values){} + public State(params State[] states) : this((IReadOnlyList)states.SelectMany(s => s.Values).ToList()){} + + public static implicit operator State(T s) => new((IReadOnlyList)s); + public static implicit operator State(List s) => new((IReadOnlyList)s); + public static implicit operator State(T[] s) => new((IReadOnlyList)s); + + public static State operator |(State left, State right) => new State(left, right); + + public IEnumerator GetEnumerator() => Values.GetEnumerator(); + + public override String ToString() => String.Join("; ", Values); + IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + + public Int32 Count => Values.Count; + public T this[Int32 index] => Values[index]; +} \ No newline at end of file