/// <summary> /// The isNormalized is nullable: when automatically creating PrefixedUnit this is null and: /// - if the unit must be created it won't be the normalized one. /// - if the unit is found, we don't check the potential race condition. /// Only when explicitly registering/creating the unit with true or false, the resulting unit IsNormalized /// property is checked to prevent race conditions. /// </summary> internal PrefixedMeasureUnit RegisterPrefixed(ExpFactor adjustment, MeasureStandardPrefix p, AtomicMeasureUnit u, bool?isNormalized = null) { var names = PrefixedMeasureUnit.ComputeNames(adjustment, p, u); return(Register(names.A, names.N, () => new PrefixedMeasureUnit(this, names, adjustment, p, u, isNormalized ?? false), m => { if (isNormalized.HasValue && m.IsNormalized != isNormalized) { ThrowArgumentException(m, $"new IsNormalized '{isNormalized}' differ from '{m.IsNormalized}'."); } })); }
/// <summary> /// The isNormalized is nullable: when automatically creating PrefixedUnit this is null and : /// - if the unit must be created it won't be the normalized one. /// - if the unit is found, we don't check the potential race condition. /// Only when explicitly registering/creating the unit with true or false, the resulting unit IsNormalized /// property is checked to prevent race conditions. /// </summary> internal PrefixedMeasureUnit RegisterPrefixed(ExpFactor adjustment, MeasureStandardPrefix p, AtomicMeasureUnit u, bool?isNormalized = null) { var names = PrefixedMeasureUnit.ComputeNames(adjustment, p, u); return(Register(names.A, names.N, () => new PrefixedMeasureUnit(this, names, adjustment, p, u, isNormalized ?? false), m => !isNormalized.HasValue || m.IsNormalized == isNormalized)); }