// Attention : ce fichier a été automatiquement généré par un
// template T4. Toute modification manuelle sera écrasée !!!
using System;
using System.Text.RegularExpressions;
namespace Developpez.Dotnet.Measures
{
///
/// Représente une mesure de longueur
///
public interface IVolume
{
///
/// Obtient la valeur de ce volume en mètres cubes
///
double ValueInCubeMeters { get; }
}
///
/// Représente un volume en mètres cubes
///
public struct CubeMeter : IVolume, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de ce volume en mètres cubes
public CubeMeter(double value)
{
_value = value;
}
///
/// Obtient la valeur de ce volume.
///
///
/// La valeur de ce volume en mètres cubes
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en mètres cubes.
///
/// Résultat de la conversion.
///
public static implicit operator CubeMeter(double value)
{
return new CubeMeter(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Volume
///
/// Résultat de la conversion.
///
public static explicit operator double(CubeMeter volume)
{
return volume.Value;
}
///
/// Teste l'égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont égaux, false sinon.
///
public static bool operator ==(CubeMeter a, CubeMeter b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont différents, false sinon.
///
public static bool operator !=(CubeMeter a, CubeMeter b)
{
return !(a == b);
}
///
/// Teste si le premier volume est inférieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur au deuxième, false sinon.
///
public static bool operator <(CubeMeter a, CubeMeter b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si le premier volume est supérieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur au deuxième, false sinon.
///
public static bool operator >(CubeMeter a, CubeMeter b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si le premier volume est inférieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur ou égal au deuxième, false sinon.
///
public static bool operator <=(CubeMeter a, CubeMeter b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si le premier volume est supérieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur ou égal au deuxième, false sinon.
///
public static bool operator >=(CubeMeter a, CubeMeter b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// La somme des deux volumes.
///
public static CubeMeter operator +(CubeMeter a, CubeMeter b)
{
return new CubeMeter(a.Value + b.Value);
}
///
/// Soustrait le deuxième volume du premier
///
/// Premier volume
/// Deuxième volume
///
/// La différence entre les deux volumes.
///
public static CubeMeter operator -(CubeMeter a, CubeMeter b)
{
return new CubeMeter(a.Value - b.Value);
}
///
/// Multiplie un volume par un nombre.
///
/// volume
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static CubeMeter operator *(CubeMeter volume, double multiplier)
{
return new CubeMeter(volume.Value*multiplier);
}
///
/// Divise un volume par un nombre.
///
/// volume
/// Diviseur
///
/// Le résultat de la division.
///
public static CubeMeter operator /(CubeMeter volume, double divisor)
{
return new CubeMeter(volume.Value/divisor);
}
#endregion
#region Methods
///
/// Compare cette instance avec un objet du même type.
///
/// Objet à comparer avec cette instance.
/// Nombre signé indiquant les valeurs relatives de cette instance et other
///
///
/// Valeur de retour
/// Description
///
/// -
/// inférieur à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// supérieur à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(CubeMeter other)
{
return Value.CompareTo(other.Value);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// une représentation textuelle de l'instance actuelle
public override string ToString()
{
return ToString(null, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// une représentation textuelle de l'instance actuelle
public string ToString(string format)
{
return ToString(format, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// Le fournisseur à utiliser pour formater la valeur
/// une représentation textuelle de l'instance actuelle
public string ToString(string format, IFormatProvider formatProvider)
{
var value = Value.ToString(format, formatProvider);
return string.Format("{0} m³", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// volume.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out CubeMeter volume)
{
var regex = new Regex(@"(?.*) ?m³");
if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success)
{
string valueText = regex.Match(text).Groups["value"].Value;
double value;
if (double.TryParse(valueText, out value))
{
volume = new CubeMeter(value);
return true;
}
}
volume = new CubeMeter(0);
return false;
}
///
/// Indique si l'instance courante de l'objet est égal à un autre objet du même type.
///
/// Objet à comparer avec cette instance.
///
/// true si l'instance courante est égale au paramètre ; sinon, false.
///
public bool Equals(CubeMeter other)
{
return Value.Equals(other.Value);
}
///
/// Determine si l' spécifié est égal à l'instance courante.
///
/// L' à comparer avec l'instance courante.
///
/// true si l' spécifié est égal à cette instance ; sinon, false.
///
public override bool Equals(object obj)
{
if (obj is CubeMeter)
return Equals((CubeMeter) obj);
return false;
}
///
/// Retourne le hash code de cette instance
///
///
/// Code de hashage de l'instance actuelle.
///
public override int GetHashCode()
{
unchecked
{
return Value.GetHashCode();
}
}
#endregion
#region Implementation of IVolume
///
/// Obtient la valeur de cette volume en mètres cubes
///
double IVolume.ValueInCubeMeters
{
get { return _value; }
}
#endregion
}
///
/// Représente un volume en litres
///
public struct Liter : IVolume, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de ce volume en litres
public Liter(double value)
{
_value = value;
}
///
/// Obtient la valeur de ce volume.
///
///
/// La valeur de ce volume en litres
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en litres.
///
/// Résultat de la conversion.
///
public static implicit operator Liter(double value)
{
return new Liter(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Volume
///
/// Résultat de la conversion.
///
public static explicit operator double(Liter volume)
{
return volume.Value;
}
///
/// Teste l'égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont égaux, false sinon.
///
public static bool operator ==(Liter a, Liter b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont différents, false sinon.
///
public static bool operator !=(Liter a, Liter b)
{
return !(a == b);
}
///
/// Teste si le premier volume est inférieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur au deuxième, false sinon.
///
public static bool operator <(Liter a, Liter b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si le premier volume est supérieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur au deuxième, false sinon.
///
public static bool operator >(Liter a, Liter b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si le premier volume est inférieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur ou égal au deuxième, false sinon.
///
public static bool operator <=(Liter a, Liter b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si le premier volume est supérieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur ou égal au deuxième, false sinon.
///
public static bool operator >=(Liter a, Liter b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// La somme des deux volumes.
///
public static Liter operator +(Liter a, Liter b)
{
return new Liter(a.Value + b.Value);
}
///
/// Soustrait le deuxième volume du premier
///
/// Premier volume
/// Deuxième volume
///
/// La différence entre les deux volumes.
///
public static Liter operator -(Liter a, Liter b)
{
return new Liter(a.Value - b.Value);
}
///
/// Multiplie un volume par un nombre.
///
/// volume
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static Liter operator *(Liter volume, double multiplier)
{
return new Liter(volume.Value*multiplier);
}
///
/// Divise un volume par un nombre.
///
/// volume
/// Diviseur
///
/// Le résultat de la division.
///
public static Liter operator /(Liter volume, double divisor)
{
return new Liter(volume.Value/divisor);
}
#endregion
#region Methods
///
/// Compare cette instance avec un objet du même type.
///
/// Objet à comparer avec cette instance.
/// Nombre signé indiquant les valeurs relatives de cette instance et other
///
///
/// Valeur de retour
/// Description
///
/// -
/// inférieur à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// supérieur à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(Liter other)
{
return Value.CompareTo(other.Value);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// une représentation textuelle de l'instance actuelle
public override string ToString()
{
return ToString(null, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// une représentation textuelle de l'instance actuelle
public string ToString(string format)
{
return ToString(format, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// Le fournisseur à utiliser pour formater la valeur
/// une représentation textuelle de l'instance actuelle
public string ToString(string format, IFormatProvider formatProvider)
{
var value = Value.ToString(format, formatProvider);
return string.Format("{0} l", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// volume.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out Liter volume)
{
var regex = new Regex(@"(?.*) ?l");
if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success)
{
string valueText = regex.Match(text).Groups["value"].Value;
double value;
if (double.TryParse(valueText, out value))
{
volume = new Liter(value);
return true;
}
}
volume = new Liter(0);
return false;
}
///
/// Indique si l'instance courante de l'objet est égal à un autre objet du même type.
///
/// Objet à comparer avec cette instance.
///
/// true si l'instance courante est égale au paramètre ; sinon, false.
///
public bool Equals(Liter other)
{
return Value.Equals(other.Value);
}
///
/// Determine si l' spécifié est égal à l'instance courante.
///
/// L' à comparer avec l'instance courante.
///
/// true si l' spécifié est égal à cette instance ; sinon, false.
///
public override bool Equals(object obj)
{
if (obj is Liter)
return Equals((Liter) obj);
return false;
}
///
/// Retourne le hash code de cette instance
///
///
/// Code de hashage de l'instance actuelle.
///
public override int GetHashCode()
{
unchecked
{
return Value.GetHashCode();
}
}
#endregion
#region Implementation of IVolume
///
/// Obtient la valeur de cette volume en mètres cubes
///
double IVolume.ValueInCubeMeters
{
get { return _value * .001; }
}
#endregion
}
///
/// Représente un volume en pintes
///
public struct Pint : IVolume, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de ce volume en pintes
public Pint(double value)
{
_value = value;
}
///
/// Obtient la valeur de ce volume.
///
///
/// La valeur de ce volume en pintes
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en pintes.
///
/// Résultat de la conversion.
///
public static implicit operator Pint(double value)
{
return new Pint(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Volume
///
/// Résultat de la conversion.
///
public static explicit operator double(Pint volume)
{
return volume.Value;
}
///
/// Teste l'égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont égaux, false sinon.
///
public static bool operator ==(Pint a, Pint b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont différents, false sinon.
///
public static bool operator !=(Pint a, Pint b)
{
return !(a == b);
}
///
/// Teste si le premier volume est inférieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur au deuxième, false sinon.
///
public static bool operator <(Pint a, Pint b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si le premier volume est supérieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur au deuxième, false sinon.
///
public static bool operator >(Pint a, Pint b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si le premier volume est inférieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur ou égal au deuxième, false sinon.
///
public static bool operator <=(Pint a, Pint b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si le premier volume est supérieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur ou égal au deuxième, false sinon.
///
public static bool operator >=(Pint a, Pint b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// La somme des deux volumes.
///
public static Pint operator +(Pint a, Pint b)
{
return new Pint(a.Value + b.Value);
}
///
/// Soustrait le deuxième volume du premier
///
/// Premier volume
/// Deuxième volume
///
/// La différence entre les deux volumes.
///
public static Pint operator -(Pint a, Pint b)
{
return new Pint(a.Value - b.Value);
}
///
/// Multiplie un volume par un nombre.
///
/// volume
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static Pint operator *(Pint volume, double multiplier)
{
return new Pint(volume.Value*multiplier);
}
///
/// Divise un volume par un nombre.
///
/// volume
/// Diviseur
///
/// Le résultat de la division.
///
public static Pint operator /(Pint volume, double divisor)
{
return new Pint(volume.Value/divisor);
}
#endregion
#region Methods
///
/// Compare cette instance avec un objet du même type.
///
/// Objet à comparer avec cette instance.
/// Nombre signé indiquant les valeurs relatives de cette instance et other
///
///
/// Valeur de retour
/// Description
///
/// -
/// inférieur à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// supérieur à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(Pint other)
{
return Value.CompareTo(other.Value);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// une représentation textuelle de l'instance actuelle
public override string ToString()
{
return ToString(null, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// une représentation textuelle de l'instance actuelle
public string ToString(string format)
{
return ToString(format, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// Le fournisseur à utiliser pour formater la valeur
/// une représentation textuelle de l'instance actuelle
public string ToString(string format, IFormatProvider formatProvider)
{
var value = Value.ToString(format, formatProvider);
return string.Format("{0} pt", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// volume.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out Pint volume)
{
var regex = new Regex(@"(?.*) ?pt");
if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success)
{
string valueText = regex.Match(text).Groups["value"].Value;
double value;
if (double.TryParse(valueText, out value))
{
volume = new Pint(value);
return true;
}
}
volume = new Pint(0);
return false;
}
///
/// Indique si l'instance courante de l'objet est égal à un autre objet du même type.
///
/// Objet à comparer avec cette instance.
///
/// true si l'instance courante est égale au paramètre ; sinon, false.
///
public bool Equals(Pint other)
{
return Value.Equals(other.Value);
}
///
/// Determine si l' spécifié est égal à l'instance courante.
///
/// L' à comparer avec l'instance courante.
///
/// true si l' spécifié est égal à cette instance ; sinon, false.
///
public override bool Equals(object obj)
{
if (obj is Pint)
return Equals((Pint) obj);
return false;
}
///
/// Retourne le hash code de cette instance
///
///
/// Code de hashage de l'instance actuelle.
///
public override int GetHashCode()
{
unchecked
{
return Value.GetHashCode();
}
}
#endregion
#region Implementation of IVolume
///
/// Obtient la valeur de cette volume en mètres cubes
///
double IVolume.ValueInCubeMeters
{
get { return _value * .00056826125; }
}
#endregion
}
///
/// Représente un volume en gallons impériaux
///
public struct Gallon : IVolume, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de ce volume en gallons impériaux
public Gallon(double value)
{
_value = value;
}
///
/// Obtient la valeur de ce volume.
///
///
/// La valeur de ce volume en gallons impériaux
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en gallons impériaux.
///
/// Résultat de la conversion.
///
public static implicit operator Gallon(double value)
{
return new Gallon(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Volume
///
/// Résultat de la conversion.
///
public static explicit operator double(Gallon volume)
{
return volume.Value;
}
///
/// Teste l'égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont égaux, false sinon.
///
public static bool operator ==(Gallon a, Gallon b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont différents, false sinon.
///
public static bool operator !=(Gallon a, Gallon b)
{
return !(a == b);
}
///
/// Teste si le premier volume est inférieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur au deuxième, false sinon.
///
public static bool operator <(Gallon a, Gallon b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si le premier volume est supérieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur au deuxième, false sinon.
///
public static bool operator >(Gallon a, Gallon b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si le premier volume est inférieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur ou égal au deuxième, false sinon.
///
public static bool operator <=(Gallon a, Gallon b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si le premier volume est supérieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur ou égal au deuxième, false sinon.
///
public static bool operator >=(Gallon a, Gallon b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// La somme des deux volumes.
///
public static Gallon operator +(Gallon a, Gallon b)
{
return new Gallon(a.Value + b.Value);
}
///
/// Soustrait le deuxième volume du premier
///
/// Premier volume
/// Deuxième volume
///
/// La différence entre les deux volumes.
///
public static Gallon operator -(Gallon a, Gallon b)
{
return new Gallon(a.Value - b.Value);
}
///
/// Multiplie un volume par un nombre.
///
/// volume
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static Gallon operator *(Gallon volume, double multiplier)
{
return new Gallon(volume.Value*multiplier);
}
///
/// Divise un volume par un nombre.
///
/// volume
/// Diviseur
///
/// Le résultat de la division.
///
public static Gallon operator /(Gallon volume, double divisor)
{
return new Gallon(volume.Value/divisor);
}
#endregion
#region Methods
///
/// Compare cette instance avec un objet du même type.
///
/// Objet à comparer avec cette instance.
/// Nombre signé indiquant les valeurs relatives de cette instance et other
///
///
/// Valeur de retour
/// Description
///
/// -
/// inférieur à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// supérieur à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(Gallon other)
{
return Value.CompareTo(other.Value);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// une représentation textuelle de l'instance actuelle
public override string ToString()
{
return ToString(null, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// une représentation textuelle de l'instance actuelle
public string ToString(string format)
{
return ToString(format, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// Le fournisseur à utiliser pour formater la valeur
/// une représentation textuelle de l'instance actuelle
public string ToString(string format, IFormatProvider formatProvider)
{
var value = Value.ToString(format, formatProvider);
return string.Format("{0} gal GB", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// volume.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out Gallon volume)
{
var regex = new Regex(@"(?.*) ?gal GB");
if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success)
{
string valueText = regex.Match(text).Groups["value"].Value;
double value;
if (double.TryParse(valueText, out value))
{
volume = new Gallon(value);
return true;
}
}
volume = new Gallon(0);
return false;
}
///
/// Indique si l'instance courante de l'objet est égal à un autre objet du même type.
///
/// Objet à comparer avec cette instance.
///
/// true si l'instance courante est égale au paramètre ; sinon, false.
///
public bool Equals(Gallon other)
{
return Value.Equals(other.Value);
}
///
/// Determine si l' spécifié est égal à l'instance courante.
///
/// L' à comparer avec l'instance courante.
///
/// true si l' spécifié est égal à cette instance ; sinon, false.
///
public override bool Equals(object obj)
{
if (obj is Gallon)
return Equals((Gallon) obj);
return false;
}
///
/// Retourne le hash code de cette instance
///
///
/// Code de hashage de l'instance actuelle.
///
public override int GetHashCode()
{
unchecked
{
return Value.GetHashCode();
}
}
#endregion
#region Implementation of IVolume
///
/// Obtient la valeur de cette volume en mètres cubes
///
double IVolume.ValueInCubeMeters
{
get { return _value * .00454609; }
}
#endregion
}
///
/// Représente un volume en gallons US
///
public struct USGallon : IVolume, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de ce volume en gallons US
public USGallon(double value)
{
_value = value;
}
///
/// Obtient la valeur de ce volume.
///
///
/// La valeur de ce volume en gallons US
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en gallons US.
///
/// Résultat de la conversion.
///
public static implicit operator USGallon(double value)
{
return new USGallon(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Volume
///
/// Résultat de la conversion.
///
public static explicit operator double(USGallon volume)
{
return volume.Value;
}
///
/// Teste l'égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont égaux, false sinon.
///
public static bool operator ==(USGallon a, USGallon b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont différents, false sinon.
///
public static bool operator !=(USGallon a, USGallon b)
{
return !(a == b);
}
///
/// Teste si le premier volume est inférieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur au deuxième, false sinon.
///
public static bool operator <(USGallon a, USGallon b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si le premier volume est supérieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur au deuxième, false sinon.
///
public static bool operator >(USGallon a, USGallon b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si le premier volume est inférieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur ou égal au deuxième, false sinon.
///
public static bool operator <=(USGallon a, USGallon b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si le premier volume est supérieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur ou égal au deuxième, false sinon.
///
public static bool operator >=(USGallon a, USGallon b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// La somme des deux volumes.
///
public static USGallon operator +(USGallon a, USGallon b)
{
return new USGallon(a.Value + b.Value);
}
///
/// Soustrait le deuxième volume du premier
///
/// Premier volume
/// Deuxième volume
///
/// La différence entre les deux volumes.
///
public static USGallon operator -(USGallon a, USGallon b)
{
return new USGallon(a.Value - b.Value);
}
///
/// Multiplie un volume par un nombre.
///
/// volume
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static USGallon operator *(USGallon volume, double multiplier)
{
return new USGallon(volume.Value*multiplier);
}
///
/// Divise un volume par un nombre.
///
/// volume
/// Diviseur
///
/// Le résultat de la division.
///
public static USGallon operator /(USGallon volume, double divisor)
{
return new USGallon(volume.Value/divisor);
}
#endregion
#region Methods
///
/// Compare cette instance avec un objet du même type.
///
/// Objet à comparer avec cette instance.
/// Nombre signé indiquant les valeurs relatives de cette instance et other
///
///
/// Valeur de retour
/// Description
///
/// -
/// inférieur à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// supérieur à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(USGallon other)
{
return Value.CompareTo(other.Value);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// une représentation textuelle de l'instance actuelle
public override string ToString()
{
return ToString(null, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// une représentation textuelle de l'instance actuelle
public string ToString(string format)
{
return ToString(format, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// Le fournisseur à utiliser pour formater la valeur
/// une représentation textuelle de l'instance actuelle
public string ToString(string format, IFormatProvider formatProvider)
{
var value = Value.ToString(format, formatProvider);
return string.Format("{0} gal US", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// volume.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out USGallon volume)
{
var regex = new Regex(@"(?.*) ?gal US");
if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success)
{
string valueText = regex.Match(text).Groups["value"].Value;
double value;
if (double.TryParse(valueText, out value))
{
volume = new USGallon(value);
return true;
}
}
volume = new USGallon(0);
return false;
}
///
/// Indique si l'instance courante de l'objet est égal à un autre objet du même type.
///
/// Objet à comparer avec cette instance.
///
/// true si l'instance courante est égale au paramètre ; sinon, false.
///
public bool Equals(USGallon other)
{
return Value.Equals(other.Value);
}
///
/// Determine si l' spécifié est égal à l'instance courante.
///
/// L' à comparer avec l'instance courante.
///
/// true si l' spécifié est égal à cette instance ; sinon, false.
///
public override bool Equals(object obj)
{
if (obj is USGallon)
return Equals((USGallon) obj);
return false;
}
///
/// Retourne le hash code de cette instance
///
///
/// Code de hashage de l'instance actuelle.
///
public override int GetHashCode()
{
unchecked
{
return Value.GetHashCode();
}
}
#endregion
#region Implementation of IVolume
///
/// Obtient la valeur de cette volume en mètres cubes
///
double IVolume.ValueInCubeMeters
{
get { return _value * .003785411784; }
}
#endregion
}
///
/// Représente un volume en onces liquides impériales
///
public struct FluidOunce : IVolume, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de ce volume en onces liquides impériales
public FluidOunce(double value)
{
_value = value;
}
///
/// Obtient la valeur de ce volume.
///
///
/// La valeur de ce volume en onces liquides impériales
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en onces liquides impériales.
///
/// Résultat de la conversion.
///
public static implicit operator FluidOunce(double value)
{
return new FluidOunce(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Volume
///
/// Résultat de la conversion.
///
public static explicit operator double(FluidOunce volume)
{
return volume.Value;
}
///
/// Teste l'égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont égaux, false sinon.
///
public static bool operator ==(FluidOunce a, FluidOunce b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont différents, false sinon.
///
public static bool operator !=(FluidOunce a, FluidOunce b)
{
return !(a == b);
}
///
/// Teste si le premier volume est inférieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur au deuxième, false sinon.
///
public static bool operator <(FluidOunce a, FluidOunce b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si le premier volume est supérieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur au deuxième, false sinon.
///
public static bool operator >(FluidOunce a, FluidOunce b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si le premier volume est inférieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur ou égal au deuxième, false sinon.
///
public static bool operator <=(FluidOunce a, FluidOunce b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si le premier volume est supérieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur ou égal au deuxième, false sinon.
///
public static bool operator >=(FluidOunce a, FluidOunce b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// La somme des deux volumes.
///
public static FluidOunce operator +(FluidOunce a, FluidOunce b)
{
return new FluidOunce(a.Value + b.Value);
}
///
/// Soustrait le deuxième volume du premier
///
/// Premier volume
/// Deuxième volume
///
/// La différence entre les deux volumes.
///
public static FluidOunce operator -(FluidOunce a, FluidOunce b)
{
return new FluidOunce(a.Value - b.Value);
}
///
/// Multiplie un volume par un nombre.
///
/// volume
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static FluidOunce operator *(FluidOunce volume, double multiplier)
{
return new FluidOunce(volume.Value*multiplier);
}
///
/// Divise un volume par un nombre.
///
/// volume
/// Diviseur
///
/// Le résultat de la division.
///
public static FluidOunce operator /(FluidOunce volume, double divisor)
{
return new FluidOunce(volume.Value/divisor);
}
#endregion
#region Methods
///
/// Compare cette instance avec un objet du même type.
///
/// Objet à comparer avec cette instance.
/// Nombre signé indiquant les valeurs relatives de cette instance et other
///
///
/// Valeur de retour
/// Description
///
/// -
/// inférieur à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// supérieur à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(FluidOunce other)
{
return Value.CompareTo(other.Value);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// une représentation textuelle de l'instance actuelle
public override string ToString()
{
return ToString(null, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// une représentation textuelle de l'instance actuelle
public string ToString(string format)
{
return ToString(format, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// Le fournisseur à utiliser pour formater la valeur
/// une représentation textuelle de l'instance actuelle
public string ToString(string format, IFormatProvider formatProvider)
{
var value = Value.ToString(format, formatProvider);
return string.Format("{0} fl oz", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// volume.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out FluidOunce volume)
{
var regex = new Regex(@"(?.*) ?fl oz");
if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success)
{
string valueText = regex.Match(text).Groups["value"].Value;
double value;
if (double.TryParse(valueText, out value))
{
volume = new FluidOunce(value);
return true;
}
}
volume = new FluidOunce(0);
return false;
}
///
/// Indique si l'instance courante de l'objet est égal à un autre objet du même type.
///
/// Objet à comparer avec cette instance.
///
/// true si l'instance courante est égale au paramètre ; sinon, false.
///
public bool Equals(FluidOunce other)
{
return Value.Equals(other.Value);
}
///
/// Determine si l' spécifié est égal à l'instance courante.
///
/// L' à comparer avec l'instance courante.
///
/// true si l' spécifié est égal à cette instance ; sinon, false.
///
public override bool Equals(object obj)
{
if (obj is FluidOunce)
return Equals((FluidOunce) obj);
return false;
}
///
/// Retourne le hash code de cette instance
///
///
/// Code de hashage de l'instance actuelle.
///
public override int GetHashCode()
{
unchecked
{
return Value.GetHashCode();
}
}
#endregion
#region Implementation of IVolume
///
/// Obtient la valeur de cette volume en mètres cubes
///
double IVolume.ValueInCubeMeters
{
get { return _value * .0000284130625; }
}
#endregion
}
///
/// Représente un volume en onces liquides US
///
public struct USFluidOunce : IVolume, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de ce volume en onces liquides US
public USFluidOunce(double value)
{
_value = value;
}
///
/// Obtient la valeur de ce volume.
///
///
/// La valeur de ce volume en onces liquides US
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en onces liquides US.
///
/// Résultat de la conversion.
///
public static implicit operator USFluidOunce(double value)
{
return new USFluidOunce(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Volume
///
/// Résultat de la conversion.
///
public static explicit operator double(USFluidOunce volume)
{
return volume.Value;
}
///
/// Teste l'égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont égaux, false sinon.
///
public static bool operator ==(USFluidOunce a, USFluidOunce b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// true si les deux volumes sont différents, false sinon.
///
public static bool operator !=(USFluidOunce a, USFluidOunce b)
{
return !(a == b);
}
///
/// Teste si le premier volume est inférieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur au deuxième, false sinon.
///
public static bool operator <(USFluidOunce a, USFluidOunce b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si le premier volume est supérieur au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur au deuxième, false sinon.
///
public static bool operator >(USFluidOunce a, USFluidOunce b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si le premier volume est inférieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est inférieur ou égal au deuxième, false sinon.
///
public static bool operator <=(USFluidOunce a, USFluidOunce b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si le premier volume est supérieur ou égal au deuxième.
///
/// Premier volume
/// Deuxième volume
///
/// true si le premier volume est supérieur ou égal au deuxième, false sinon.
///
public static bool operator >=(USFluidOunce a, USFluidOunce b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux volumes.
///
/// Premier volume
/// Deuxième volume
///
/// La somme des deux volumes.
///
public static USFluidOunce operator +(USFluidOunce a, USFluidOunce b)
{
return new USFluidOunce(a.Value + b.Value);
}
///
/// Soustrait le deuxième volume du premier
///
/// Premier volume
/// Deuxième volume
///
/// La différence entre les deux volumes.
///
public static USFluidOunce operator -(USFluidOunce a, USFluidOunce b)
{
return new USFluidOunce(a.Value - b.Value);
}
///
/// Multiplie un volume par un nombre.
///
/// volume
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static USFluidOunce operator *(USFluidOunce volume, double multiplier)
{
return new USFluidOunce(volume.Value*multiplier);
}
///
/// Divise un volume par un nombre.
///
/// volume
/// Diviseur
///
/// Le résultat de la division.
///
public static USFluidOunce operator /(USFluidOunce volume, double divisor)
{
return new USFluidOunce(volume.Value/divisor);
}
#endregion
#region Methods
///
/// Compare cette instance avec un objet du même type.
///
/// Objet à comparer avec cette instance.
/// Nombre signé indiquant les valeurs relatives de cette instance et other
///
///
/// Valeur de retour
/// Description
///
/// -
/// inférieur à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// supérieur à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(USFluidOunce other)
{
return Value.CompareTo(other.Value);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// une représentation textuelle de l'instance actuelle
public override string ToString()
{
return ToString(null, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// une représentation textuelle de l'instance actuelle
public string ToString(string format)
{
return ToString(format, null);
}
///
/// Retourne une représentation textuelle de l'instance actuelle
///
/// Le format à utiliser
/// Le fournisseur à utiliser pour formater la valeur
/// une représentation textuelle de l'instance actuelle
public string ToString(string format, IFormatProvider formatProvider)
{
var value = Value.ToString(format, formatProvider);
return string.Format("{0} fl oz", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// volume.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out USFluidOunce volume)
{
var regex = new Regex(@"(?.*) ?fl oz");
if (regex.IsMatch(text) && regex.Match(text).Groups["value"].Success)
{
string valueText = regex.Match(text).Groups["value"].Value;
double value;
if (double.TryParse(valueText, out value))
{
volume = new USFluidOunce(value);
return true;
}
}
volume = new USFluidOunce(0);
return false;
}
///
/// Indique si l'instance courante de l'objet est égal à un autre objet du même type.
///
/// Objet à comparer avec cette instance.
///
/// true si l'instance courante est égale au paramètre ; sinon, false.
///
public bool Equals(USFluidOunce other)
{
return Value.Equals(other.Value);
}
///
/// Determine si l' spécifié est égal à l'instance courante.
///
/// L' à comparer avec l'instance courante.
///
/// true si l' spécifié est égal à cette instance ; sinon, false.
///
public override bool Equals(object obj)
{
if (obj is USFluidOunce)
return Equals((USFluidOunce) obj);
return false;
}
///
/// Retourne le hash code de cette instance
///
///
/// Code de hashage de l'instance actuelle.
///
public override int GetHashCode()
{
unchecked
{
return Value.GetHashCode();
}
}
#endregion
#region Implementation of IVolume
///
/// Obtient la valeur de cette volume en mètres cubes
///
double IVolume.ValueInCubeMeters
{
get { return _value * .0000295735295625; }
}
#endregion
}
///
/// Fournit des méthodes d'extension pour les volumes
///
public static class VolumeExtensions
{
///
/// Convertit un volume en mètres cubes
///
/// Le type de l'unité d'origine
/// volume à convertir
/// Valeur en mètres cubes
public static CubeMeter ToCubeMeter(this T volume)
where T : IVolume
{
return volume.ValueInCubeMeters;
}
///
/// Convertit un volume en litres
///
/// Le type de l'unité d'origine
/// volume à convertir
/// Valeur en litres
public static Liter ToLiter(this T volume)
where T : IVolume
{
return volume.ValueInCubeMeters / .001;
}
///
/// Convertit un volume en pintes
///
/// Le type de l'unité d'origine
/// volume à convertir
/// Valeur en pintes
public static Pint ToPint(this T volume)
where T : IVolume
{
return volume.ValueInCubeMeters / .00056826125;
}
///
/// Convertit un volume en gallons impériaux
///
/// Le type de l'unité d'origine
/// volume à convertir
/// Valeur en gallons impériaux
public static Gallon ToGallon(this T volume)
where T : IVolume
{
return volume.ValueInCubeMeters / .00454609;
}
///
/// Convertit un volume en gallons US
///
/// Le type de l'unité d'origine
/// volume à convertir
/// Valeur en gallons US
public static USGallon ToUSGallon(this T volume)
where T : IVolume
{
return volume.ValueInCubeMeters / .003785411784;
}
///
/// Convertit un volume en onces liquides impériales
///
/// Le type de l'unité d'origine
/// volume à convertir
/// Valeur en onces liquides impériales
public static FluidOunce ToFluidOunce(this T volume)
where T : IVolume
{
return volume.ValueInCubeMeters / .0000284130625;
}
///
/// Convertit un volume en onces liquides US
///
/// Le type de l'unité d'origine
/// volume à convertir
/// Valeur en onces liquides US
public static USFluidOunce ToUSFluidOunce(this T volume)
where T : IVolume
{
return volume.ValueInCubeMeters / .0000295735295625;
}
}
}