/// <summary> /// Validates this instance. /// </summary> /// <remarks> /// <para>Ensures that <see cref="MerchantId"/>, <see cref="DeviceId"/>, <see cref="PosVersion"/> and <see cref="OperatorId"/> are not null, empty string or only whitespace. /// Also ensure no property is larger than it's maximum allowed length (see individual property notes for details). /// </para> /// </remarks> /// <exception cref="ArgumentNullException">Thrown if <see cref="MerchantId"/>, <see cref="DeviceId"/>, <see cref="PosVersion"/>, or <see cref="OperatorId"/> is null.</exception> /// <exception cref="ArgumentException">Thrown if <see cref="MerchantId"/>, <see cref="DeviceId"/>, <see cref="PosVersion"/>, or <see cref="OperatorId"/> is empty or only whitespace, or longer than their maximum allowed lengths.</exception> /// <exception cref="ArgumentOutOfRangeException">Thrown if <see cref="TrackingData"/> contains more than 1000000 items.</exception> public virtual void Validate() { MerchantId.GuardNullOrWhiteSpace("request", nameof(MerchantId)); MerchantId.GuardLength("request", nameof(MerchantId), 10); DeviceId.GuardNullOrWhiteSpace("request", nameof(DeviceId)); DeviceId.GuardLength("request", nameof(DeviceId), 64); PosVersion.GuardNullOrWhiteSpace("request", nameof(PosVersion)); PosVersion.GuardLength("request", nameof(PosVersion), 64); OperatorId.GuardNullOrWhiteSpace("request", nameof(OperatorId)); OperatorId.GuardLength("request", nameof(OperatorId), 64); var td = this.TrackingData; if (td != null) { td.Count.GuardRange(nameof(TrackingData), 0, 1000000); } }