Coi chừng: nếu bạn đang tạo ra random
bên trong một vòng lặp như ví dụ for(int i = 0; i < 10; i++)
, không đặt việc kê khai new Random()
bên trong vòng lặp.
Từ MSDN:
Các ngẫu nhiên bắt đầu hệ số từ một giá trị giống. Nếu cùng một hạt giống được sử dụng nhiều lần, cùng một chuỗi số được tạo. Một cách để tạo ra các chuỗi khác nhau là làm cho giá trị hạt giống phụ thuộc vào thời gian, do đó tạo ra một chuỗi khác nhau với mỗi trường hợp ngẫu nhiên mới. Theo mặc định, các nhà xây dựng parameterless của lớp ngẫu nhiên sử dụng đồng hồ hệ thống để tạo ra giá trị hạt giống của nó ...
Vì vậy, dựa trên thực tế này, làm điều gì đó như:
var random = new Random();
for(int d = 0; d < 7; d++)
{
// Actual BOE
boes.Add(new LogBOEViewModel()
{
LogDate = criteriaDate,
BOEActual = GetRandomDouble(random, 100, 1000),
BOEForecast = GetRandomDouble(random, 100, 1000)
});
}
double GetRandomDouble(Random random, double min, double max)
{
return min + (random.NextDouble() * (max - min));
}
Làm cách này bạn có đảm bảo bạn sẽ nhận được các giá trị kép khác nhau.
Nguồn
2014-04-10 15:37:01
Chỉ cần xem ra nếu bạn gọi GetRandomNumber() trong một vòng lặp vì nó sẽ tạo ra các giá trị tương tự hơn và hơn –
@ John - Điểm tốt, tôi đã thêm này để trả lời của tôi. – Michael
hoàn hảo! đây là những gì tôi đang tìm kiếm. Cảm ơn bạn rất nhiều – CodeLikeBeaker