我有在Visual Studio 2010中创建的解决方案。它
有两个项目,让我们说这些项目是project A
和project B
。用户将参数输入project A
然后project B
假设在excel文件中的随机列中生成随机数。输出应该随机保存在Excel文件中。
当我使用Visual Studio 2010测试程序时,它的行为符合要求。现在我打包的时候
编程并创建一个不随机化的设置.exe
文件。而是按顺序保存输出。
谁能告诉我这似乎是什么问题?
以下是generatin随机位置的示例代码
public void AppendCards(int seriesNumber, int batchSize, string cardVal, long batchId)
{
Random random = new Random();
Random ran = new Random();
int commentsNumber = comments.Count - 1;
List<int> position = new List<int>();
for (int i = 1; i < seriesNumber + 1; i++)
{
position.Add(i);
}
long CardTypeId = DataAcc.GetCardTypeId(cardVal);
WinningCard sc = new WinningCard();
sc.BatchId = batchId;
sc.CardTypeId = CardTypeId;
sc.DateCreated = DateTime.Now;
int winpos = random.Next(1, seriesNumber);
switch (winpos)
{
case 1:
sc.PositionOne = cardVal;
break;
case 2:
sc.PositionTwo = cardVal;
break;
case 3:
sc.PositionThree = cardVal;
break;
case 4:
sc.PositionFour = cardVal;
break;
case 5:
sc.PositionFive = cardVal;
break;
}
for (int k = 1; k <= seriesNumber; k++)
{
int w = random.Next(0, DataAcc.GetCommets().Count);
switch (k)
{
case 1:
if (sc.PositionOne == "")
{
sc.PositionOne = comments[w].CommentDescription;
}
break;
case 2:
if (sc.PositionTwo == "")
{
sc.PositionTwo = comments[w].CommentDescription;
}
break;
case 3:
if (sc.PositionThree == "")
{
sc.PositionThree = comments[w].CommentDescription;
}
break;
case 4:
if (sc.PositionFour == "")
{
sc.PositionFour = comments[w].CommentDescription;
}
break;
case 5:
if (sc.PositionFive == "")
{
sc.PositionFive = comments[w].CommentDescription;
}
break;
}
}
答案 0 :(得分:2)
让我猜一下 - 你连续几次快速呼叫AppendCards
并获得相同的数字?这是因为您在此方法中创建了一个新的Random
实例 - 将其移出并重用相同的Random
实例(例如,通过使random
成为实例变量)。
Random
使用当前时间作为种子值来确定要生成的随机数序列 - 如果您快速调用AppendCards
(如部署应用程序时),时间是相同的仍然生成相同的数字。在Visual Studio中调试此问题时,问题就会消失,因为当您逐步完成时间过后。