2using System.Collections.Generic;
3using System.Globalization;
23 private readonly List<KeyValuePair<string, string>> _segments =
75 string normalizedName =
80 string normalizedValue =
85 EnsureSegmentNameIsUnique(
89 new KeyValuePair<string, string>(
115 CultureInfo.InvariantCulture));
137 CultureInfo.InvariantCulture));
160 CultureInfo.InvariantCulture));
181 where TEnum :
struct, Enum
205 if (!
string.IsNullOrWhiteSpace(
224 if (_segments.Count == 0)
237 $
"{segment.Key}={segment.Value}")));
251 private void EnsureSegmentNameIsUnique(
259 StringComparison.Ordinal)))
261 throw new InvalidOperationException(
262 $
"Domain-key segment '{segmentName}' is already " +
267 private static string NormalizeToken(
269 string parameterName)
271 if (
string.IsNullOrWhiteSpace(
274 throw new ArgumentException(
275 "A domain-key token cannot be empty.",
279 string normalizedValue =
282 if (normalizedValue.Contains(
284 StringComparison.Ordinal) ||
285 normalizedValue.Contains(
287 StringComparison.Ordinal))
289 throw new ArgumentException(
290 "A domain-key token cannot contain the reserved " +
291 "characters '|' or '='.",
295 return normalizedValue;
MathematicalDomainKeyBuilder Add(string name, int value)
Adds an integer segment.
string Build()
Builds the immutable domain-key text.
string Category
Gets the domain-key category.
MathematicalDomainKeyBuilder Add< TEnum >(string name, TEnum value)
Adds an enumeration segment.
MathematicalDomainKeyBuilder Add(string name, Guid value)
Adds a globally unique identifier segment.
MathematicalDomainKeyBuilder Add(string name, long value)
Adds a long integer segment.
int SegmentCount
Gets the number of added segments.
MathematicalDomainKeyBuilder AddOptional(string name, string? value)
Adds a segment only when the supplied text value is not empty.
override string ToString()
Returns the built domain key.
MathematicalDomainKeyBuilder Add(string name, string value)
Adds a text segment.
MathematicalDomainKeyBuilder(string category)
Initializes a domain-key builder.