private ValueInfo(IPhysicalQuantity quantity, IDimensionUnit unit, string substance, string location) { this.quantity = quantity; this.unit = unit; this.substance = substance; this.location = location; }
static IDimensionUnit defineUnit(IDimensionUnit u) { IDimensionUnit ou; bool alreadyDefined = units.TryGetValue(u.Name, out ou) || units.TryGetValue(u.ShortName, out ou) || units.TryGetValue(u.Dimension, out ou); if (alreadyDefined) { // redefinition check if (string.Compare(ou.Name, u.Name, StringComparison.OrdinalIgnoreCase) == 0 && string.Compare(ou.Dimension, u.Dimension, StringComparison.OrdinalIgnoreCase) == 0) { return(ou); } System.Diagnostics.Trace.Assert(false, $"Redefinition of unit '{u.ShortName}__{u.Dimension}' : {ou.ShortName}__{ou.Dimension}"); } // check unit dimension (all subdimensions must be predefined) var subdimensions = u.Dimension.Split(dimensionsSeparators); if (subdimensions.Length > 1) { foreach (var subdim in subdimensions) { if (char.IsLetter(subdim[0])) { System.Diagnostics.Trace.Assert(units.ContainsKey(subdim), "Unknown dimension '" + subdim + "' in '" + u.Dimension + '\''); } else { float tmp; System.Diagnostics.Trace.Assert(float.TryParse(subdim, System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, out tmp) && Math.Abs(tmp) > float.Epsilon, "Invalid number '" + subdim + "' in dimension expression"); } } } units.Add(u.Name, u); if (!units.ContainsKey(u.ShortName)) { units.Add(u.ShortName, u); } if (!units.ContainsKey(u.Dimension)) { units.Add(u.Dimension, u); } return(u); }