/// <summary> /// Initializes a new instance of the <see cref="Unit"/> class. /// </summary> /// <param name="kind">The kind of unit.</param> /// <param name="granularity">The granularity of the unit.</param> public Unit( UnitOfTimeKind kind, UnitOfTimeGranularity granularity) { if (kind == UnitOfTimeKind.Invalid) { throw new ArgumentOutOfRangeException(nameof(kind), Invariant($"{nameof(kind)} is {nameof(UnitOfTimeKind)}.{nameof(UnitOfTimeKind.Invalid)}.")); } if (granularity == UnitOfTimeGranularity.Invalid) { throw new ArgumentOutOfRangeException(nameof(granularity), Invariant($"{nameof(granularity)} is {nameof(UnitOfTimeGranularity)}.{nameof(UnitOfTimeGranularity.Invalid)}.")); } if (granularity == UnitOfTimeGranularity.Unbounded) { throw new ArgumentOutOfRangeException(nameof(granularity), Invariant($"{nameof(granularity)} is {nameof(UnitOfTimeGranularity)}.{nameof(UnitOfTimeGranularity.Unbounded)}.")); } if ((granularity == UnitOfTimeGranularity.Day) && (kind != UnitOfTimeKind.Calendar)) { throw new ArgumentException(Invariant($"{nameof(granularity)} of {nameof(UnitOfTimeGranularity)}.{nameof(UnitOfTimeGranularity.Day)} is only applicable when {nameof(kind)} is {nameof(UnitOfTimeKind)}.{nameof(UnitOfTimeKind.Calendar)}; specified value is {kind}.")); } this.Kind = kind; this.Granularity = granularity; }
/// <summary> /// Constructs a <see cref="UnitOfTime"/> whose <see cref="UnitOfTimeGranularity"/> is <see cref="UnitOfTimeGranularity.Year"/> /// from a year number and <see cref="UnitOfTimeKind"/>. /// </summary> /// <param name="year">The year.</param> /// <param name="unitOfTimeKind">The unit-of-time kind.</param> /// <returns> /// The <see cref="UnitOfTime"/>. /// </returns> /// <exception cref="ArgumentException"><paramref name="unitOfTimeKind"/> is <see cref="UnitOfTimeKind.Invalid"/>.</exception> public static UnitOfTime ToUnitOfTime( this int year, UnitOfTimeKind unitOfTimeKind) { if (unitOfTimeKind == UnitOfTimeKind.Invalid) { throw new ArgumentOutOfRangeException(Invariant($"'{nameof(unitOfTimeKind)}' == '{UnitOfTimeKind.Invalid}'"), (Exception)null); } UnitOfTime result; switch (unitOfTimeKind) { case UnitOfTimeKind.Calendar: result = year.ToCalendar(); break; case UnitOfTimeKind.Fiscal: result = year.ToFiscal(); break; case UnitOfTimeKind.Generic: result = year.ToGeneric(); break; default: throw new NotSupportedException(Invariant($"This {nameof(UnitOfTimeKind)} is not supported: {unitOfTimeKind}")); } return(result); }
public Unit DeepCloneWithKind(UnitOfTimeKind kind) { var result = new Unit( kind, this.Granularity.DeepClone()); return(result); }