Если им не нужно быть случайным, но только уникальным, то этот код работает с использованием типа одометра.
public class Class1
{
List<char> _chars = new List<char>() { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2','3','4', '5', '6', '7', '8', '9', '0' };
private static int[] index = new int[6] {0, 0, 0, 0, 0, 0};
private const int charMax = 35;
public string UniqueString()
{
if (index[5] > charMax)
{
IncromentParent(5);
}
StringBuilder result = new StringBuilder();
result.Append(_chars[index[0]]);
result.Append(_chars[index[1]]);
result.Append(_chars[index[2]]);
result.Append(_chars[index[3]]);
result.Append(_chars[index[4]]);
result.Append(_chars[index[5]]);
index[5]++;
return result.ToString();
}
private void IncromentParent(int active)
{
if (active == 0)
throw new Exception("out of numbers");
int parent = active - 1;
index[active] = 0;
index[parent]++;
if (index[parent] > charMax)
IncromentParent(parent);
}
}
А вот тест прохождения блока, но это занимает много времени, чтобы запустить ...
[TestMethod]
public void MyTestMethod()
{
Class1 target = new Class1();
List<string> results = new List<string>();
for (int i = 0; i < 100000; i++)
{
string result = target.UniqueString();
if (!results.Contains(result))
results.Add(result);
else
Assert.Fail(string.Format("The string '{0}' is already in the list", result));
}
Console.WriteLine(results.Count.ToString());
}
вы не можете без кэширования его. это особенность случайности. –
@ DanielA.White - Разве вы не имеете в виду ... * надевает солнцезащитные очки * ... случайную вещь о случайности? – Polynomial
Вы хотите что-то уникальное или случайное? Они очень разные. – Sign