我有我使用的產生通過創建隨機整數,並將其鑄造char
Random類生成同一序列
public static string GenerateRandomString(int minLength, int maxLength)
{
var length = GenerateRandomNumber(minLength, maxLength);
var builder = new StringBuilder(length);
var random = new Random((int)DateTime.Now.Ticks);
for (var i = 0; i < length; i++)
{
builder.Append((char) random.Next(255));
}
return builder.ToString();
}
隨機字符串的方法
的問題是,當我把這種方法頻繁,它正在創建相同的值序列,正如文檔中所述:
隨機數的產生從種子值開始。如果重複使用相同的 種子,則會生成相同的一系列數字。一種產生不同序列的方式是使種子值 與時間有關,由此產生與Random的每個新的實例不同的系列。
正如您所看到的,我正在依賴種子時間並在每次調用方法時創建一個新實例Random
。儘管如此,我的測試仍然失敗。
[TestMethod]
public void GenerateRandomStringTest()
{
for (var i = 0; i < 100; i++)
{
var string1 = Utilitaries.GenerateRandomString(10, 100);
var string2 = Utilitaries.GenerateRandomString(10, 20);
if (string1.Contains(string2))
throw new InternalTestFailureException("");
}
}
我怎樣才能確保獨立於我稱之爲方法的頻率,序列會「總是」不同?
你根本就在這樣一個緊張的循環中調用它的時候沒有。 [根據文檔](http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx)每毫秒有10,000個刻度。你的循環可能比執行的循環少。因此,每個迭代的「DateTime.Now.Ticks」都是一樣的。你可能不得不找到一個web服務或一些給你一個隨機數的東西......但這不會很快。 –