部署后C#程序的行为方式不同

时间:2013-05-29 02:17:20

标签: c# c#-4.0

我有在Visual Studio 2010中创建的解决方案。它 有两个项目,让我们说这些项目是project Aproject 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;
            }
        }

1 个答案:

答案 0 :(得分:2)

让我猜一下 - 你连续几次快速呼叫AppendCards并获得相同的数字?这是因为您在此方法中创建了一个新的Random实例 - 将其移出并重用相同的Random实例(例如,通过使random成为实例变量)。

Random使用当前时间作为种子值来确定要生成的随机数序列 - 如果您快速调用AppendCards(如部署应用程序时),时间是相同的仍然生成相同的数字。在Visual Studio中调试此问题时,问题就会消失,因为当您逐步完成时间过后。