/// <summary> /// Creates the quantity with the given numeric value and unit. /// </summary> /// <param name="value">The numeric value to construct this quantity with.</param> /// <param name="unit">The unit representation to construct this quantity with.</param> /// <remarks>Value parameter cannot be named 'value' due to constraint when targeting Windows Runtime Component.</remarks> /// <exception cref="ArgumentException">If value is NaN or Infinity.</exception> private SpecificEnergy(decimal value, SpecificEnergyUnit unit) { if (unit == SpecificEnergyUnit.Undefined) { throw new ArgumentException("The quantity can not be created with an undefined unit.", nameof(unit)); } _value = value; _unit = unit; }
/// <summary> /// Creates the quantity with the given numeric value and unit. /// </summary> /// <param name="value">The numeric value to construct this quantity with.</param> /// <param name="unit">The unit representation to construct this quantity with.</param> /// <remarks>Value parameter cannot be named 'value' due to constraint when targeting Windows Runtime Component.</remarks> /// <exception cref="ArgumentException">If value is NaN or Infinity.</exception> private SpecificEnergy(double value, SpecificEnergyUnit unit) { if (unit == SpecificEnergyUnit.Undefined) { throw new ArgumentException("The quantity can not be created with an undefined unit.", nameof(unit)); } _value = Guard.EnsureValidNumber(value, nameof(value)); _unit = unit; }
/// <summary> /// Creates an instance of the quantity with the given numeric value in units compatible with the given <see cref="UnitSystem"/>. /// </summary> /// <param name="numericValue">The numeric value to contruct this quantity with.</param> /// <param name="unitSystem">The unit system to create the quantity with.</param> /// <exception cref="ArgumentNullException">The given <see cref="UnitSystem"/> is null.</exception> /// <exception cref="InvalidOperationException">No unit was found for the given <see cref="UnitSystem"/>.</exception> /// <exception cref="InvalidOperationException">More than one unit was found for the given <see cref="UnitSystem"/>.</exception> public SpecificEnergy(double numericValue, UnitSystem unitSystem) { if (unitSystem == null) { throw new ArgumentNullException(nameof(unitSystem)); } _value = Guard.EnsureValidNumber(numericValue, nameof(numericValue)); _unit = Info.GetUnitInfoFor(unitSystem.BaseUnits).Value; }
private SpecificEnergy(number joulesPerKilogram, number?value, SpecificEnergyUnit?unit, bool validate = true) { if (validate) { Assert.IsInRange(joulesPerKilogram, MinJoulesPerKilogram, MaxJoulesPerKilogram, nameof(value)); } JoulesPerKilogram = joulesPerKilogram; _value = value; _unit = unit; }
/// <summary> /// Creates an instance of the quantity with the given numeric value in units compatible with the given <see cref="UnitSystem"/>. /// If multiple compatible units were found, the first match is used. /// </summary> /// <param name="numericValue">The numeric value to contruct this quantity with.</param> /// <param name="unitSystem">The unit system to create the quantity with.</param> /// <exception cref="ArgumentNullException">The given <see cref="UnitSystem"/> is null.</exception> /// <exception cref="ArgumentException">No unit was found for the given <see cref="UnitSystem"/>.</exception> public SpecificEnergy(double numericValue, UnitSystem unitSystem) { if (unitSystem == null) { throw new ArgumentNullException(nameof(unitSystem)); } var unitInfos = Info.GetUnitInfosFor(unitSystem.BaseUnits); var firstUnitInfo = unitInfos.FirstOrDefault(); _value = Guard.EnsureValidNumber(numericValue, nameof(numericValue)); _unit = firstUnitInfo?.Value ?? throw new ArgumentException("No units were found for the given UnitSystem.", nameof(unitSystem)); }
/// <summary> /// Creates the quantity with a value of 0 in the base unit JoulePerKilogram. /// </summary> /// <remarks> /// Windows Runtime Component requires a default constructor. /// </remarks> public SpecificEnergy() { _value = 0; _unit = BaseUnit; }
public SpecificEnergy(double joulesperkilogram) { _value = Convert.ToDouble(joulesperkilogram); _unit = BaseUnit; }
SpecificEnergy(double numericValue, SpecificEnergyUnit unit) { _value = numericValue; _unit = unit; }
private void Initialize() { this.initialized = true; BindingStringFormat.TryGet(this.binding, out this.bindingQuantityFormat); if (!string.IsNullOrEmpty(this.bindingQuantityFormat?.SymbolFormat)) { if (this.ValueFormat != null) { this.errorText.AppendLine($"ValueFormat cannot be set when Binding.StringFormat is a unit format."); } if (this.StringFormat != null) { this.errorText.AppendLine($"ValueFormat cannot be set when Binding.StringFormat is a unit format."); } } if (this.quantityFormat != null) { if (this.ValueFormat != null) { this.errorText.AppendLine($"Both ValueFormat and StringFormat cannot be set."); } } else { if (this.unit != null && SymbolFormat != null) { this.quantityFormat = FormatCache <SpecificEnergyUnit> .GetOrCreate(ValueFormat, this.unit.Value, SymbolFormat.Value); } } if (this.unit == null) { var hasFmtUnit = !string.IsNullOrEmpty(this.quantityFormat?.SymbolFormat); var hasBindingUnit = !string.IsNullOrEmpty(this.bindingQuantityFormat?.SymbolFormat); if (!hasFmtUnit && !hasBindingUnit) { this.errorText.AppendLine($"Unit cannot be null."); this.errorText.AppendLine($"Must be specified Explicitly or in StringFormat or in Binding.StringFormat."); } else if (hasFmtUnit && !hasBindingUnit) { this.unit = this.quantityFormat.Unit; } else if (!hasFmtUnit && hasBindingUnit) { this.unit = this.bindingQuantityFormat.Unit; } else { if (this.quantityFormat.Unit != this.bindingQuantityFormat.Unit) { this.errorText.AppendLine($"Ambiguous units StringFormat: {quantityFormat.CompositeFormat} Binding.StringFormat: {this.bindingQuantityFormat.CompositeFormat}"); } this.unit = this.quantityFormat.Unit; } } else { if (!string.IsNullOrEmpty(this.quantityFormat?.SymbolFormat) && this.unit != this.quantityFormat.Unit) { this.errorText.AppendLine($"Unit is set to '{this.unit}' but StringFormat is '{StringFormat.Replace("{0:", string.Empty).Replace("}", string.Empty)}'"); } var hasBindingUnit = !string.IsNullOrEmpty(this.bindingQuantityFormat?.SymbolFormat); } if (this.UnitInput == Wpf.UnitInput.SymbolRequired) { if (string.IsNullOrEmpty(this.quantityFormat?.SymbolFormat)) { if (string.IsNullOrEmpty(this.bindingQuantityFormat?.SymbolFormat)) { if (this.unit == null) { this.errorText.AppendLine("UnitInput == SymbolRequired but no unit format is specified"); } else if (this.SymbolFormat != null) { this.quantityFormat = FormatCache <SpecificEnergyUnit> .GetOrCreate(this.ValueFormat, this.unit.Value, this.SymbolFormat.Value); if (this.UnitInput == null) { this.UnitInput = Wpf.UnitInput.SymbolRequired; } else if (this.UnitInput == Wpf.UnitInput.ScalarOnly) { this.errorText.AppendLine("Cannot have ScalarOnly and SymbolFormat specified"); } } else { this.quantityFormat = FormatCache <SpecificEnergyUnit> .GetOrCreate(this.ValueFormat, this.unit.Value); if (this.UnitInput == null) { this.UnitInput = Wpf.UnitInput.ScalarOnly; } else if (this.UnitInput == Wpf.UnitInput.ScalarOnly) { this.errorText.AppendLine("Cannot have ScalarOnly and SymbolFormat specified"); } } } else { this.quantityFormat = this.bindingQuantityFormat; } } } if (UnitInput == null) { if (!string.IsNullOrEmpty(this.quantityFormat?.SymbolFormat) || !string.IsNullOrEmpty(this.bindingQuantityFormat?.SymbolFormat)) { UnitInput = Wpf.UnitInput.SymbolRequired; } } }