-3

我需要一个简单的随机数来创建我正在创建的循环,而且我一生都无法弄清楚我在这里做错了什么。有人可以查看下面的代码并向我解释为什么它给我以下错误:

错误 1 ​​'System.Random.Next(int, int)' 的最佳重载方法匹配有一些无效参数

错误 2 参数 1:无法从 'decimal' 转换为 'int'
错误 3 参数 2: 无法从 'decimal' 转换为 'int'

我正在尝试从 Numeric Up/Down 控件中提取范围的最小值和最大值。我会假设 LINQ 或 C# 会有一个简单的单行生成器,但我找不到它。

Random rnd1 = new Random();
var integer = rnd1.Next(numericUpDown_RandomMin.Value, 
                                                  numericUpDown_RandomMax.Value);
textbox.Text = integer.ToString();
4

5 回答 5

2

好吧,首先numericUpDown_RandomMin.Valueand ..._RandomMax.Valueare not int,所以你可能需要转换:

var integer = rnd1.Next((int)numericUpDown_RandomMin.Value, (int)numericUpDown_RandomMax.Value);

除此之外,您遇到了什么错误?

于 2013-03-13T14:20:42.927 回答
2

NumericUpDown 是小数,需要转换为 int。

var integer = rnd1.Next((int)numericUpDown_RandomMin.Value, (int)numericUpDown_RandomMax.Value);
于 2013-03-13T14:20:45.167 回答
2

Random.Next需要两个Int32值,但NumericUpDown.Value属性是 a decimal。因为从decimalto 的转换会int丢失一些值精度,所以您必须明确地进行:

rnd1.Next((int)numericUpDown_RandomMin.Value, (int)numericUpDown_RandomMax.Value);
于 2013-03-13T14:20:55.723 回答
2

NumericUpDown.Value 返回一个小数,而 Next() 接受一个整数。您可能想先将其转换为整数:

var integer = rnd1.Next((int)numericUpDown_RandomMin.Value, (int)numericUpDown_RandomMax.Value);
于 2013-03-13T14:21:42.197 回答
1

由于NumericUpDown.Value的返回类型是Decimal,您需要显式地将您的numericUpDown_RandomMin.ValuenumericUpDown_RandomMax.Value值转换为,Int32因为Random.Next(Int32, Int32)需要两个参数作为Int32。像;

Random rnd1 = new Random();
var integer = rnd1.Next((int)numericUpDown_RandomMin.Value, (int)numericUpDown_RandomMax.Value);
textbox.Text = integer.ToString();
于 2013-03-13T14:28:19.037 回答