using System; namespace AppConv.General; abstract class DecimalUnitConverterSimple<T> : DecimalUnitConverterBase<T> where T : struct { // ReSharper disable once StaticMemberInGenericType private static readonly Func<decimal, decimal> FuncNoChange = static val => val; private readonly DecimalFuncMap MapFrom = new (); private readonly DecimalFuncMap MapTo = new (); private int invalidUnitObject = -1; protected sealed override NameMap Names { get ; } = new (); protected sealed override DecimalFuncMap ConvertFrom => MapFrom; protected sealed override DecimalFuncMap ConvertTo => MapTo; protected override int Precision => 3; protected override bool CaseCheck => true; protected void AddUnit(T unitObject, params string[] names) { foreach (string name in names) { Names.Add(name, unitObject); } ConvertFrom.Add(unitObject, FuncNoChange); ConvertTo.Add(unitObject, FuncNoChange); } protected void SetUnitFactor(T unitObject, decimal factor) { ConvertFrom[unitObject] = val => val * factor; ConvertTo[unitObject] = val => val / factor; } protected void SetInvalidUnitObject(T unitObject) { invalidUnitObject = (int) (object) unitObject; } protected sealed override bool IsValueInvalid(T value) { return (int) (object) value == invalidUnitObject; } }