Referencing/Using 来自另一种方法的数组..?

Referencing/Using an Array From Another Method..?

我需要能够在我的按钮单击无效时使用 randomNumbers[] 数组,但是如果我将 void randomNumbers() 中的内容放在我的按钮单击无效中,则每次我单击按钮时它都会覆盖原始随机订单生成。这不是我想要的。有什么办法可以 call/reference/use/import randomNumbers 从它自己的无效到按钮单击无效。

背景知识:

我的整体 objective 最初是用 0 - 90 中的 90 个数字随机填充一个数组,没有重复,并在单击按钮时使它们出现在文本框中。经过几天尝试不同的方法后,我使用了这个,它是我用过的最接近的方法,因为没有重复的方法。当我在按钮中使用 randomNumbers[] 单击无效时,富文本框将完美地显示数字,除了它会一次显示所有数字而不是每次我单击按钮时一个一个地显示,所以我创建了另外 2 个显示的文本框一个一个地编号,但每次我单击按钮时都会发生重复,randomNumbers[] 会以不同的顺序重新生成。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }


    void randomNumbers()
    {
        Random rnd = new Random();
        var randomNumbers = Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();

    }

    string space = " ";
    int number;

   void button1_Click(object sender, EventArgs e)
    {

        int[] array = randomNumbers;
        for (int i = 0; i < 90; i++)
        {
            richTextBox1.Text += randomNumbers[i].ToString() + space;
            richTextBox2.Text += array[i].ToString() + space;
            number = array[i];

        }

        textBox1.Text += number.ToString() + space;
        textBox2.Text += textBox1.Text;
        textBox1.Clear();

    }

    }
}

您的问题源于您的数组是 void randomNumbers() 方法的本地数组。

解决方法真的很简单;将 randomNumbers 移动为 class 宽变量,或者(更优雅的解决方案)将 randomNumbers 的 return 类型更改为 int[] 数组。即:

选项A:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int[] GenerateRandomNumbers()
        {
            Random rnd = new Random();
            return Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
        }

        string space = " ";
        int number;

        void button1_Click(object sender, EventArgs e)
        {
            int[] array = GenerateRandomNumbers();
            for (int i = 0; i < 90; i++)
            {
                richTextBox1.Text += randomNumbers[i].ToString() + space;
                richTextBox2.Text += array[i].ToString() + space;
                number = array[i];
            }

            textBox1.Text += number.ToString() + space;
            textBox2.Text += textBox1.Text;
            textBox1.Clear();
        }
    }
}

或者,如果您需要保留列表 class-wide 或 在实例化后不更改 ,您应该将其设为 class-范围:

选项 B:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int[] randomNumbers;

        public Form1()
        {
            InitializeComponent();
            randomNumbers = GenerateRandomNumbers();
        }

        int[] GenerateRandomNumbers()
        {
            Random rnd = new Random();
            return Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
        }

        string space = " ";
        int number;

        void button1_Click(object sender, EventArgs e)
        {
            int[] array = randomNumbers;
            for (int i = 0; i < 90; i++)
            {
                richTextBox1.Text += randomNumbers[i].ToString() + space;
                richTextBox2.Text += array[i].ToString() + space;
                number = array[i];
            }

            textBox1.Text += number.ToString() + space;
            textBox2.Text += textBox1.Text;
            textBox1.Clear();
        }
    }
}

没有测试,但它应该适合你。

编辑:刚刚测试过,据我所知工作正常。

试试这个

public partial class Form1 : Form
{
   private int[] array;
   private int mouseClickCount=0;

    public Form1()
    {
        InitializeComponent();
        GenerateRandomNumbers();
    }


    void GenerateRandomNumbers()
    {
        Random rnd = new Random();
        array = Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
    }


   void button1_Click(object sender, EventArgs e)
    {
       if(mouseClickCount == 90)
       {
          mouseClickCount =0;
          richTextBox1.Clear();
       } 
        mouseClickCount++;
        richTextBox1.Text+=randomNumbers[mouseClickCount]+ " ";    
    }
}
namespace WindowsFormsApplication1
    {
      public class generate
        {
    public static int[] randomNumbers()
    {
        Random rnd = new Random();
        var randomNumbers = Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
        return randomNumbers;

    }
}
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }




    string space = " ";
    int number;

    void button1_Click(object sender, EventArgs e)
    {

        int[] array = generate.randomNumbers();
        for (int i = 0; i < 90; i++)
        {
            richTextBox1.Text += randomNumbers[i].ToString() + space;
            richTextBox2.Text += array[i].ToString() + space;
            number = array[i];

        }

        textBox1.Text += number.ToString() + space;
        textBox2.Text += textBox1.Text;
        textBox1.Clear();

    }

}
  }

试试这个。