c# - 标签文本值未设置

标签 c#

我有 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/

相关文章:

c# - 向任何 TextReader 添加功能

c# - 如何在 Asp.Net Core 2.2 中在运行时禁用/启用身份验证?

c# - 将日期时间字符串转换为原始时区的日期时间

c# - 如何在组合框中显示枚举值?

javascript - 单击同一个链接时如何停止多个链接

c# - 如何捕获异常并继续程序? C#

c# - WPF C# : MVVM - Passing on the Sudoku from ViewModel -> View

c# - 如何使 WPF 程序匹配当前选择的 Windows 主题

c# - URL 编码问题 - HttpWebRequest 不起作用,Firefox 可以

c# - 将 QueryString 解析为强类型对象