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