如何在WPF中随机化

时间:2011-11-26 01:33:49

标签: c# wpf

你好我是WPF的新手,我确实有一些ASP.NET的经验,但这是一个全新的标签,我会做label.Content而不是label.Text,无论如何..我正在尝试做一个简单的表格,点击它时会显示5个不同的随机数..

当我逐行调试这个代码时,它会随机化并且有一个不同数字的字符串,但是当我不调试并立即运行它并单击按钮时它会显示相同的数字? ,不知道为什么......理想情况下我会有

[1] [23] [45] [24] [34]

如果我调试并单步执行,它会给我结果但是如果我不调试并且只是运行程序我得到

[23] [23] [23] [23] [23]

非常感谢任何帮助

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            int[] numbers = new int[5];
            StringBuilder sb = new StringBuilder();

            List<int> nums = new List<int>();
            foreach (int i in numbers)
            {
               int rand = RandomNumber(1,59);
               nums.Add(rand);
            }


            string numsList = string.Empty;

            foreach (int items in nums)
            {
                numsList += "[" + items.ToString() + "]";
            }

            lblNumber.Content = numsList.ToString();
        }

        private int RandomNumber(int min, int max)
        {
            Random random = new Random();
            return random.Next(min, max);
        }


    }
}

1 个答案:

答案 0 :(得分:3)

您不应每次都创建一个新的Random(改为将其设为只读字段)。在一个接一个地创建新实例时,种子可能总是相同的。它只能在调试模式下工作,因为当您单步执行时实例创建得更慢。

MSDN:

  

默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,而其参数化构造函数可以根据当前时间中的滴答数采用Int32值。但是,由于时钟具有有限的分辨率,使用无参数构造函数以紧密连续的方式创建不同的随机对象会创建随机数生成器,从而生成相同的随机数序列。