我有 8 个标签。我希望每个标签都将其文本属性设置为随机数。出于某种原因,只有第一个标签设置了数字,这是为什么呢? (此外,虽然没有直接关系,但如果有更好的方法来处理 label1.Text、label2.Text、label3.Text 等,请告诉我!)
谢谢
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
go();
}
void go()
{
int[] numbers = new int[8];
foreach (int number in numbers)
{
numbers[number] = getRandomNumber();
}
label1.Text = numbers[0].ToString();
label2.Text = numbers[1].ToString();
label3.Text = numbers[2].ToString();
label4.Text = numbers[3].ToString();
label5.Text = numbers[4].ToString();
label6.Text = numbers[5].ToString();
label7.Text = numbers[6].ToString();
label8.Text = numbers[7].ToString();
}
int getRandomNumber()
{
Random random = new Random();
return random.Next(10, 1000);
}
}
最佳答案
编辑:更多问题
only the first label is having a number set
这是因为您以这种方式声明并初始化了一个 int[]
:
int[] numbers = new int[8];
在此之后你有一个 Length
为 8 的数组,但是所有的整数都是 default(int)
什么是 0。
因此下面的foreach
循环...
foreach (int number in numbers)
{
numbers[number] = getRandomNumber();
}
... 只会将第一个 int
初始化为一个随机数(好吧,不是真正的随机数,稍后会详细介绍)。您可以改用 for
循环:
for (int iii=0; iii<numbers.Length;iii++)
{
numbers[iii] = getRandomNumber();
}
但是如果您使用我下面改进的代码,也可以解决这个问题。
在循环中使用相同的随机实例。否则它将创建相同的数字,因为它是用当前时间播种的。
MSDN :
The random number generation starts from a seed value. If the same seed is used repeatedly, the same series of numbers is generated. One way to produce different sequences is to make the seed value time-dependent, thereby producing a different series with each new instance of Random. By default, the parameterless constructor of the Random class uses the system clock to generate its seed value, while its parameterized constructor can take an Int32 value based on the number of ticks in the current time.
Random rnd = new Random();
foreach (int number in numbers)
{
numbers[number] = rnd.Next(10, 1000);
}
根据你的第二个问题如何改进代码:你可以使用带有标签的数组:
Random random = new Random();
var labels = new[] { label1, label2, label3, label4, label5, label6, label7, label8 };
for (int i = 0; i < labels.Length; i++)
{
labels[i].Text = random.Next(10, 1000).ToString();
}
关于c# - 标签文本值未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18091406/