// 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 ILength
{
///
/// Obtient la valeur de cette longueur en mètres
///
double ValueInMeters { get; }
}
///
/// Représente une longueur en mètres
///
public struct Meter : ILength, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de cette longueur en mètres.
public Meter(double value)
{
_value = value;
}
///
/// Obtient la valeur de cette longueur.
///
///
/// La valeur de cette longueur en mètres
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en mètres.
///
/// Résultat de la conversion.
///
public static implicit operator Meter(double value)
{
return new Meter(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Longueur
///
/// Résultat de la conversion.
///
public static explicit operator double(Meter length)
{
return length.Value;
}
///
/// Teste l'égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont égales, false sinon.
///
public static bool operator ==(Meter a, Meter b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont différentes, false sinon.
///
public static bool operator !=(Meter a, Meter b)
{
return !(a == b);
}
///
/// Teste si la première longueur est inférieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure à la deuxième, false sinon.
///
public static bool operator <(Meter a, Meter b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si la première longueur est supérieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure à la deuxième, false sinon.
///
public static bool operator >(Meter a, Meter b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si la première longueur est inférieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure ou égale à la deuxième, false sinon.
///
public static bool operator <=(Meter a, Meter b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si la première longueur est supérieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure ou égale à la deuxième, false sinon.
///
public static bool operator >=(Meter a, Meter b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// La somme des deux longueurs.
///
public static Meter operator +(Meter a, Meter b)
{
return new Meter(a.Value + b.Value);
}
///
/// Soustrait la deuxième longueur de la première
///
/// Première longueur
/// Deuxième longueur
///
/// La différence entre les deux longueurs.
///
public static Meter operator -(Meter a, Meter b)
{
return new Meter(a.Value - b.Value);
}
///
/// Multiplie une longueur par un nombre.
///
/// Longueur
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static Meter operator *(Meter length, double multiplier)
{
return new Meter(length.Value*multiplier);
}
///
/// Divise une longueur par un nombre.
///
/// Longueur
/// Diviseur
///
/// Le résultat de la division.
///
public static Meter operator /(Meter length, double divisor)
{
return new Meter(length.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érieure à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// Supérieure à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(Meter 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.
/// Longueur.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out Meter length)
{
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))
{
length = new Meter(value);
return true;
}
}
length = new Meter(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(Meter 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 Meter)
return Equals((Meter) 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 ILength
///
/// Obtient la valeur de cette longueur en mètres
///
double ILength.ValueInMeters
{
get { return _value; }
}
#endregion
}
///
/// Représente une longueur en pieds
///
public struct Foot : ILength, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de cette longueur en pieds.
public Foot(double value)
{
_value = value;
}
///
/// Obtient la valeur de cette longueur.
///
///
/// La valeur de cette longueur en pieds
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en pieds.
///
/// Résultat de la conversion.
///
public static implicit operator Foot(double value)
{
return new Foot(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Longueur
///
/// Résultat de la conversion.
///
public static explicit operator double(Foot length)
{
return length.Value;
}
///
/// Teste l'égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont égales, false sinon.
///
public static bool operator ==(Foot a, Foot b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont différentes, false sinon.
///
public static bool operator !=(Foot a, Foot b)
{
return !(a == b);
}
///
/// Teste si la première longueur est inférieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure à la deuxième, false sinon.
///
public static bool operator <(Foot a, Foot b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si la première longueur est supérieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure à la deuxième, false sinon.
///
public static bool operator >(Foot a, Foot b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si la première longueur est inférieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure ou égale à la deuxième, false sinon.
///
public static bool operator <=(Foot a, Foot b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si la première longueur est supérieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure ou égale à la deuxième, false sinon.
///
public static bool operator >=(Foot a, Foot b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// La somme des deux longueurs.
///
public static Foot operator +(Foot a, Foot b)
{
return new Foot(a.Value + b.Value);
}
///
/// Soustrait la deuxième longueur de la première
///
/// Première longueur
/// Deuxième longueur
///
/// La différence entre les deux longueurs.
///
public static Foot operator -(Foot a, Foot b)
{
return new Foot(a.Value - b.Value);
}
///
/// Multiplie une longueur par un nombre.
///
/// Longueur
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static Foot operator *(Foot length, double multiplier)
{
return new Foot(length.Value*multiplier);
}
///
/// Divise une longueur par un nombre.
///
/// Longueur
/// Diviseur
///
/// Le résultat de la division.
///
public static Foot operator /(Foot length, double divisor)
{
return new Foot(length.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érieure à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// Supérieure à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(Foot 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} ft", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// Longueur.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out Foot length)
{
var regex = new Regex(@"(?.*) ?ft");
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))
{
length = new Foot(value);
return true;
}
}
length = new Foot(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(Foot 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 Foot)
return Equals((Foot) 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 ILength
///
/// Obtient la valeur de cette longueur en mètres
///
double ILength.ValueInMeters
{
get { return _value * .3048; }
}
#endregion
}
///
/// Représente une longueur en pouces
///
public struct Inch : ILength, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de cette longueur en pouces.
public Inch(double value)
{
_value = value;
}
///
/// Obtient la valeur de cette longueur.
///
///
/// La valeur de cette longueur en pouces
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en pouces.
///
/// Résultat de la conversion.
///
public static implicit operator Inch(double value)
{
return new Inch(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Longueur
///
/// Résultat de la conversion.
///
public static explicit operator double(Inch length)
{
return length.Value;
}
///
/// Teste l'égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont égales, false sinon.
///
public static bool operator ==(Inch a, Inch b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont différentes, false sinon.
///
public static bool operator !=(Inch a, Inch b)
{
return !(a == b);
}
///
/// Teste si la première longueur est inférieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure à la deuxième, false sinon.
///
public static bool operator <(Inch a, Inch b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si la première longueur est supérieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure à la deuxième, false sinon.
///
public static bool operator >(Inch a, Inch b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si la première longueur est inférieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure ou égale à la deuxième, false sinon.
///
public static bool operator <=(Inch a, Inch b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si la première longueur est supérieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure ou égale à la deuxième, false sinon.
///
public static bool operator >=(Inch a, Inch b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// La somme des deux longueurs.
///
public static Inch operator +(Inch a, Inch b)
{
return new Inch(a.Value + b.Value);
}
///
/// Soustrait la deuxième longueur de la première
///
/// Première longueur
/// Deuxième longueur
///
/// La différence entre les deux longueurs.
///
public static Inch operator -(Inch a, Inch b)
{
return new Inch(a.Value - b.Value);
}
///
/// Multiplie une longueur par un nombre.
///
/// Longueur
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static Inch operator *(Inch length, double multiplier)
{
return new Inch(length.Value*multiplier);
}
///
/// Divise une longueur par un nombre.
///
/// Longueur
/// Diviseur
///
/// Le résultat de la division.
///
public static Inch operator /(Inch length, double divisor)
{
return new Inch(length.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érieure à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// Supérieure à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(Inch 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} in", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// Longueur.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out Inch length)
{
var regex = new Regex(@"(?.*) ?in");
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))
{
length = new Inch(value);
return true;
}
}
length = new Inch(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(Inch 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 Inch)
return Equals((Inch) 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 ILength
///
/// Obtient la valeur de cette longueur en mètres
///
double ILength.ValueInMeters
{
get { return _value * .0254; }
}
#endregion
}
///
/// Représente une longueur en miles
///
public struct Mile : ILength, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de cette longueur en miles.
public Mile(double value)
{
_value = value;
}
///
/// Obtient la valeur de cette longueur.
///
///
/// La valeur de cette longueur en miles
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en miles.
///
/// Résultat de la conversion.
///
public static implicit operator Mile(double value)
{
return new Mile(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Longueur
///
/// Résultat de la conversion.
///
public static explicit operator double(Mile length)
{
return length.Value;
}
///
/// Teste l'égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont égales, false sinon.
///
public static bool operator ==(Mile a, Mile b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont différentes, false sinon.
///
public static bool operator !=(Mile a, Mile b)
{
return !(a == b);
}
///
/// Teste si la première longueur est inférieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure à la deuxième, false sinon.
///
public static bool operator <(Mile a, Mile b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si la première longueur est supérieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure à la deuxième, false sinon.
///
public static bool operator >(Mile a, Mile b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si la première longueur est inférieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure ou égale à la deuxième, false sinon.
///
public static bool operator <=(Mile a, Mile b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si la première longueur est supérieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure ou égale à la deuxième, false sinon.
///
public static bool operator >=(Mile a, Mile b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// La somme des deux longueurs.
///
public static Mile operator +(Mile a, Mile b)
{
return new Mile(a.Value + b.Value);
}
///
/// Soustrait la deuxième longueur de la première
///
/// Première longueur
/// Deuxième longueur
///
/// La différence entre les deux longueurs.
///
public static Mile operator -(Mile a, Mile b)
{
return new Mile(a.Value - b.Value);
}
///
/// Multiplie une longueur par un nombre.
///
/// Longueur
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static Mile operator *(Mile length, double multiplier)
{
return new Mile(length.Value*multiplier);
}
///
/// Divise une longueur par un nombre.
///
/// Longueur
/// Diviseur
///
/// Le résultat de la division.
///
public static Mile operator /(Mile length, double divisor)
{
return new Mile(length.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érieure à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// Supérieure à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(Mile 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} mi", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// Longueur.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out Mile length)
{
var regex = new Regex(@"(?.*) ?mi");
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))
{
length = new Mile(value);
return true;
}
}
length = new Mile(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(Mile 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 Mile)
return Equals((Mile) 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 ILength
///
/// Obtient la valeur de cette longueur en mètres
///
double ILength.ValueInMeters
{
get { return _value * 1609.344; }
}
#endregion
}
///
/// Représente une longueur en milles marins
///
public struct NauticalMile : ILength, IComparable, IEquatable, IFormattable
{
private readonly double _value;
///
/// Initialise une nouvelle instance de la structure .
///
/// La valeur de cette longueur en milles marins.
public NauticalMile(double value)
{
_value = value;
}
///
/// Obtient la valeur de cette longueur.
///
///
/// La valeur de cette longueur en milles marins
///
public double Value
{
get { return _value; }
}
#region Operators
///
/// Effectue une conversion implicite de vers .
///
/// Valeur en milles marins.
///
/// Résultat de la conversion.
///
public static implicit operator NauticalMile(double value)
{
return new NauticalMile(value);
}
///
/// Effectue une conversion explicite de vers .
///
/// Longueur
///
/// Résultat de la conversion.
///
public static explicit operator double(NauticalMile length)
{
return length.Value;
}
///
/// Teste l'égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont égales, false sinon.
///
public static bool operator ==(NauticalMile a, NauticalMile b)
{
return a.Equals(b);
}
///
/// Teste la non-égalité de deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// true si les deux longueurs sont différentes, false sinon.
///
public static bool operator !=(NauticalMile a, NauticalMile b)
{
return !(a == b);
}
///
/// Teste si la première longueur est inférieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure à la deuxième, false sinon.
///
public static bool operator <(NauticalMile a, NauticalMile b)
{
return a.CompareTo(b) < 0;
}
///
/// Teste si la première longueur est supérieure à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure à la deuxième, false sinon.
///
public static bool operator >(NauticalMile a, NauticalMile b)
{
return a.CompareTo(b) > 0;
}
///
/// Teste si la première longueur est inférieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est inférieure ou égale à la deuxième, false sinon.
///
public static bool operator <=(NauticalMile a, NauticalMile b)
{
return a.CompareTo(b) <= 0;
}
///
/// Teste si la première longueur est supérieure ou égale à la deuxième.
///
/// Première longueur
/// Deuxième longueur
///
/// true si la première longueur est supérieure ou égale à la deuxième, false sinon.
///
public static bool operator >=(NauticalMile a, NauticalMile b)
{
return a.CompareTo(b) >= 0;
}
///
/// Additionne deux longueurs.
///
/// Première longueur
/// Deuxième longueur
///
/// La somme des deux longueurs.
///
public static NauticalMile operator +(NauticalMile a, NauticalMile b)
{
return new NauticalMile(a.Value + b.Value);
}
///
/// Soustrait la deuxième longueur de la première
///
/// Première longueur
/// Deuxième longueur
///
/// La différence entre les deux longueurs.
///
public static NauticalMile operator -(NauticalMile a, NauticalMile b)
{
return new NauticalMile(a.Value - b.Value);
}
///
/// Multiplie une longueur par un nombre.
///
/// Longueur
/// Multiplicateur
///
/// Le résultat de la multiplication.
///
public static NauticalMile operator *(NauticalMile length, double multiplier)
{
return new NauticalMile(length.Value*multiplier);
}
///
/// Divise une longueur par un nombre.
///
/// Longueur
/// Diviseur
///
/// Le résultat de la division.
///
public static NauticalMile operator /(NauticalMile length, double divisor)
{
return new NauticalMile(length.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érieure à zéro
/// Cette instance est inférieure à other.
///
/// -
/// Zéro
/// Cette instance est égale à other.
///
/// -
/// Supérieure à zéro
/// Cette instance est supérieure à other.
///
///
///
public int CompareTo(NauticalMile 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} NM", value);
}
///
/// Essaye de parser le texte.
///
/// Texte à parser.
/// Longueur.
/// true, si le parsing est réussi; sinon false.
public static bool TryParse(string text, out NauticalMile length)
{
var regex = new Regex(@"(?.*) ?NM");
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))
{
length = new NauticalMile(value);
return true;
}
}
length = new NauticalMile(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(NauticalMile 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 NauticalMile)
return Equals((NauticalMile) 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 ILength
///
/// Obtient la valeur de cette longueur en mètres
///
double ILength.ValueInMeters
{
get { return _value * 1852; }
}
#endregion
}
///
/// Fournit des méthodes d'extension pour les longueurs
///
public static class LengthExtensions
{
///
/// Convertit une longueur en mètres
///
/// Le type de l'unité d'origine
/// Longueur à convertir
/// Valeur en mètres
public static Meter ToMeter(this T length)
where T : ILength
{
return length.ValueInMeters;
}
///
/// Convertit une longueur en pieds
///
/// Le type de l'unité d'origine
/// Longueur à convertir
/// Valeur en pieds
public static Foot ToFoot(this T length)
where T : ILength
{
return length.ValueInMeters / .3048;
}
///
/// Convertit une longueur en pouces
///
/// Le type de l'unité d'origine
/// Longueur à convertir
/// Valeur en pouces
public static Inch ToInch(this T length)
where T : ILength
{
return length.ValueInMeters / .0254;
}
///
/// Convertit une longueur en miles
///
/// Le type de l'unité d'origine
/// Longueur à convertir
/// Valeur en miles
public static Mile ToMile(this T length)
where T : ILength
{
return length.ValueInMeters / 1609.344;
}
///
/// Convertit une longueur en milles marins
///
/// Le type de l'unité d'origine
/// Longueur à convertir
/// Valeur en milles marins
public static NauticalMile ToNauticalMile(this T length)
where T : ILength
{
return length.ValueInMeters / 1852;
}
}
}