С для (var i в myArray) можно циклично выполниться по объектам также, я буду содержать ключевое имя, и можно получить доступ к свойству через myArray [я] . Additionaly, любые методы, которые Вы добавите к объекту, будет включен в цикл также т.е. если Вы будете использовать какую-либо внешнюю платформу как jQuery или прототип, или если Вы добавите методы для возражения прототипам непосредственно, однажды я укажу на те методы.
Вы создаете случайный экземпляр в методе, что заставляет его возвращать те же значения при быстром вызове. Я бы сделал что-то вроде этого:
private static Random random = new Random((int)DateTime.Now.Ticks);//thanks to McAden
private string RandomString(int size)
{
StringBuilder builder = new StringBuilder();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
return builder.ToString();
}
// get 1st random string
string Rand1 = RandomString(4);
// get 2nd random string
string Rand2 = RandomString(4);
// creat full rand string
string docNum = Rand1 + "-" + Rand2;
(измененная версия вашего кода)
Это потому, что каждый новый экземпляр Random генерирует одни и те же числа из-за того, что он вызывается так быстро. Не продолжайте создавать новый экземпляр, просто вызовите next () и объявите свой случайный класс вне вашего метода.
У вас должен быть один случайный объект уровня класса, инициируемый один раз в конструкторе и повторно используемый при каждом вызове (это продолжает ту же последовательность псевдослучайных чисел). Конструктор без параметров уже внутренне заполняет генератор Environment.TickCount.
Вы создаете экземпляр объекта Random
внутри своего метода.
Объект Random
засевается из системных часов ], что означает, что если вы вызываете свой метод несколько раз в быстрой последовательности, он будет каждый раз использовать одно и то же начальное число, что означает, что он будет генерировать одну и ту же последовательность случайных чисел, что означает, что вы получите одну и ту же строку.
Чтобы решить эту проблему, переместите свой экземпляр Random
за пределы самого метода (и пока вы в нем, вы можете избавиться от этой сумасшедшей последовательности вызовов Convert
и Floor
и NextDouble
):
private readonly Random _rng = new Random();
private const string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private string RandomString(int size)
{
char[] buffer = new char[size];
for (int i = 0; i < size; i++)
{
buffer[i] = _chars[_rng.Next(_chars.Length)];
}
return new string(buffer);
}
Вот сообщение в блоге, в котором представлен немного более надежный класс для генерации случайных слов, предложений и абзацев.