UnitsNet es una librería para .Net que simplifica enormemente el trabajo con variables con unidades que representan magnitudes físicas.
Seguramente habrás sufrido el pequeño infierno que resulta tener que gestionar dimensiones, superficies, mediciones de masa… cuando intervienen distintas unidades, y lo engorroso que es tener en cuenta todas las posibles consideraciones.
Units.Net proporciona las funciones para manejar magnitudes. Incorpora más de 1000 unidades de 95 tipos de magnitudes físicas, como longitud, masa, fuerza, tiempo, presión.
Crear una magnitud física en Units.Net es tan sencillo como iniciarla a partir de uno de los métodos estáticos
Length meter = Length.FromMeters(1);
Length twoMeters = new Length(2, LengthUnit.Meter);
A partir de ahí, podemos operar con ellas, y Units.Net realizara el tratamiento adecuado para ellas.
Length l1 = 2 * Length.FromMeters(1);
Length l2 = Length.FromMeters(1) / 2;
Length l3 = l1 + l2;
Por supuesto, podemos realizar operaciones más complejas que impliquen varias unidades. Units.Net lanzará una excepción en caso de que alguna de las operaciones no sea consistente con sus unidades.
Length distance = Speed.FromKilometersPerHour(80) * TimeSpan.FromMinutes(30);
Acceleration a1 = Speed.FromKilometersPerHour(80) / TimeSpan.FromSeconds(2);
Acceleration a2 = Force.FromNewtons(100) / Mass.FromKilograms(20);
RotationalSpeed r = Angle.FromDegrees(90) / TimeSpan.FromSeconds(2);
Units.Net incorpora muchas más funciones interesantes, que cubren la mayoría de necesidades que tenemos al tratar con variables con unidad. Estas funciones incluyen conversión, parsing, serialización, conversión a cadena en varios idiomas.
Además, es posible ampliar con nuestras propias unidades, incluyendo una definición en un fichero Json. Aunque la librería incorpora la mayoría de unidades que podáis necesitar en vuestros proyectos.
Units.Net es Open Source y el código se encuentra disponible en https://github.com/angularsen/UnitsNet. Además, está disponible en un paquete Nuget para añadirlo cómodamente a nuestros proyectos, y es compatible con .Net Framework y .Net Standard.