AngleSharp by AngleSharp

<PackageReference Include="AngleSharp" Version="0.9.3" />

 Angle

Represents an angle value.
using AngleSharp.Extensions; using System; namespace AngleSharp.Css.Values { public struct Angle : IEquatable<Angle>, IComparable<Angle>, IFormattable { public enum Unit : ushort { None, Deg, Rad, Grad, Turn } public static readonly Angle Zero = default(Angle); public static readonly Angle HalfQuarter = new Angle(45, Unit.Deg); public static readonly Angle Quarter = new Angle(90, Unit.Deg); public static readonly Angle TripleHalfQuarter = new Angle(135, Unit.Deg); public static readonly Angle Half = new Angle(180, Unit.Deg); private readonly float _value; private readonly Unit _unit; public float Value => _value; public Unit Type => _unit; public string UnitString { get { switch (_unit) { case Unit.Deg: return Units.Deg; case Unit.Grad: return Units.Grad; case Unit.Turn: return Units.Turn; case Unit.Rad: return Units.Rad; default: return string.Empty; } } } public Angle(float value, Unit unit) { _value = value; _unit = unit; } public static explicit operator float(Angle angle) { return angle.ToRadian(); } public static bool TryParse(string s, out Angle result) { float result2 = 0; Unit unit = GetUnit(s.CssUnit(out result2)); if (unit != 0) { result = new Angle(result2, unit); return true; } result = default(Angle); return false; } public static Unit GetUnit(string s) { switch (s) { case "deg": return Unit.Deg; case "grad": return Unit.Grad; case "turn": return Unit.Turn; case "rad": return Unit.Rad; default: return Unit.None; } } public float ToRadian() { switch (_unit) { case Unit.Deg: return (float)(0.017453292519943295 * (double)_value); case Unit.Grad: return (float)(0.015707963267948967 * (double)_value); case Unit.Turn: return (float)(6.283185307179586 * (double)_value); default: return _value; } } public float Tan() { return (float)Math.Tan((double)ToRadian()); } public float Cos() { return (float)Math.Cos((double)ToRadian()); } public float Sin() { return (float)Math.Sin((double)ToRadian()); } public bool Equals(Angle other) { return ToRadian() == other.ToRadian(); } public int CompareTo(Angle other) { return ToRadian().CompareTo(other.ToRadian()); } public override bool Equals(object obj) { if (obj is Angle) return Equals((Angle)obj); return false; } public override int GetHashCode() { return (int)_value; } public override string ToString() { return _value.ToString() + UnitString; } public string ToString(string format, IFormatProvider formatProvider) { return _value.ToString(format, formatProvider) + UnitString; } } }