public CssSizeLength(string value) { value = value?.ToLowerInvariant() ?? throw new ArgumentNullException(nameof(value)); _stringValue = value; if (value.StartsWith("calc", StringComparison.OrdinalIgnoreCase)) { _stringValue = value; _value = null; _unit = CssSizeLengthUnit.Calc; return; } var index = value .Select((c, i) => ((char c, int i)?)(c, i)) .FirstOrDefault(x => !(x.Value.c == '.' || x.Value.c >= '0' && x.Value.c <= '9')) ?.i ?? value.Length; if (index == 0) { throw new FormatException(); } _value = int.Parse(value.Substring(0, index), CultureInfo.InvariantCulture); if (index == value.Length) { _unit = CssSizeLengthUnit.Px; _stringValue = null; return; } var unit = value.Substring(index).Trim(); if (!Enum.TryParse(unit, ignoreCase: true, out _unit)) { _unit = unit switch { "%" => CssSizeLengthUnit.Percent, _ => throw new FormatException(), }; } }
private CssSizeLength(int value, CssSizeLengthUnit unit) { _value = value; _stringValue = null; _unit = unit; }