public static StandardizeApartIndexical newStandardizeApartIndexical(
Char preferredPrefix) {
char ch = preferredPrefix;
if (!(Char.IsLetter(ch) && Char.IsLower(ch))) {
throw new ArgumentException("Preferred prefix :"
+ preferredPrefix + " must be a valid a lower case letter.");
}
StringBuilder sb = new StringBuilder();
lock (_assignedIndexicals) {
int currentPrefixCnt = -1;
if (!_assignedIndexicals.ContainsKey(preferredPrefix))
{
currentPrefixCnt = 0;
_assignedIndexicals.Add(preferredPrefix, currentPrefixCnt);
} else {
currentPrefixCnt += 1;
_assignedIndexicals[preferredPrefix] = currentPrefixCnt;
}
sb.Append(preferredPrefix);
for (int i = 0; i < currentPrefixCnt; i++) {
sb.Append(preferredPrefix);
}
}
return new StandardizeApartIndexicalImpl(sb.ToString());
}
}