You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中正确将Windows窗体数据存入跨类数组?

问题:如何将变量存入另一个类中声明的数组?

我需要收集一些数据并保存到数组中,已经创建了一个类来存储所有数组,但尝试将变量保存到该数组时遇到问题,请问怎么把不同变量存入另一个类里声明的数组?


相关代码

按钮点击事件代码

private void button2_Click(object sender, EventArgs e)
{
    Terminal terminales = new Terminal();
    String terminalName = textName.Text;
    terminales.TerminalName = terminalName;
    
    String terminalDirection = directText.Text;
    terminales.TerminalDirection = terminalDirection;

    String terminalPhone = phoneText.Text;
    terminales.TerminalPhone = terminalPhone;

    DateTime horaApertura = DateTime.Parse(hour1Text.Text.ToString());
    //return horaApertura.Value.ToString("HH:mm");
    terminales.HoraApertura = horaApertura;
    DateTime horaCierre = DateTime.Parse(hour1Text.Text.ToString());
    terminales.HoraCierre = horaCierre;

    contador = contador + 1;
    for(int i = 0; i < Arreglos.terminalesArray.Length; i++)
    {
        if (Arreglos.terminalesArray[i] != null)
        {
            Arreglos.terminalesArray[i] = terminales;
            break;
        }
    }
    MessageBox.Show(terminales.HoraCierre.ToString());
    MessageBox.Show(Arreglos.terminalesArray[0].HoraApertura.ToString());
}

注:消息框仅用于测试。

Terminal类代码

public class Terminal
{
    private int terminalID;
    private string terminalName;
    private string terminalDirection;
    private string terminalPhone;
    private bool terminalEstado;
    private DateTime horaApertura;
    private DateTime horaCierre;

    public Terminal()
    {

    }
    public Terminal(int terminalID,
                      string terminalName,
                      string terminalDirection,
                      string terminalPhone,
                      bool terminalEstado,
                      DateTime horaApertura,
                      DateTime horaCierre)
    {
        this.terminalID = terminalID;
        this.terminalName = terminalName;
        this.terminalDirection = terminalDirection;
        this.terminalPhone = terminalPhone;
        this.terminalEstado = terminalEstado;
        this.horaApertura = horaApertura;
        this.horaCierre = horaCierre;
    }

    public int TerminalID { get => terminalID; set => terminalID = value; }
    public string TerminalName { get => terminalName; set => terminalName = value; }
    public string TerminalDirection { get => terminalDirection; set => terminalDirection = value; }
    public string TerminalPhone { get => terminalPhone; set => terminalPhone = value; }
    public bool TerminalEstado { get => terminalEstado; set => terminalEstado = value; }
    public DateTime HoraApertura { get => horaApertura; set => horaApertura = value; }
    public DateTime HoraCierre { get => horaCierre; set => horaCierre = value; }
}

解决方案

先修正原数组方案的问题

你的代码里有两个核心问题:

  1. 循环判断条件写反了:你现在是找!= null的位置赋值,这会覆盖已有的数据,应该找== null的空位来添加新实例
  2. 要确保Arreglos.terminalesArray已经完成初始化(比如在Arreglos类中声明为public static Terminal[] terminalesArray = new Terminal[100];,根据需求设置长度)

修正后的按钮点击事件代码:

private void button2_Click(object sender, EventArgs e)
{
    Terminal terminal = new Terminal();
    terminal.TerminalName = textName.Text;
    terminal.TerminalDirection = directText.Text;
    terminal.TerminalPhone = phoneText.Text;
    
    // 用TryParse避免无效时间抛出异常,同时注意horaCierre应该对应另一个输入框(比如hour2Text)
    if (DateTime.TryParse(hour1Text.Text, out DateTime horaApertura))
    {
        terminal.HoraApertura = horaApertura;
    }
    if (DateTime.TryParse(hour2Text.Text, out DateTime horaCierre))
    {
        terminal.HoraCierre = horaCierre;
    }

    // 找到数组第一个空位存入
    for(int i = 0; i < Arreglos.terminalesArray.Length; i++)
    {
        if (Arreglos.terminalesArray[i] == null)
        {
            Arreglos.terminalesArray[i] = terminal;
            break;
        }
    }

    // 安全的测试输出
    MessageBox.Show(terminal.HoraCierre.ToString());
    if (Arreglos.terminalesArray[0] != null)
    {
        MessageBox.Show(Arreglos.terminalesArray[0].HoraApertura.ToString());
    }
}

更推荐的List替代方案

数组长度固定,若不确定数据量,用List<Terminal>会更灵活,无需手动寻找空位:

  1. 修改Arreglos类:
public static class Arreglos
{
    public static List<Terminal> terminalesList = new List<Terminal>();
}
  1. 修改按钮点击事件:
private void button2_Click(object sender, EventArgs e)
{
    Terminal terminal = new Terminal();
    terminal.TerminalName = textName.Text;
    terminal.TerminalDirection = directText.Text;
    terminal.TerminalPhone = phoneText.Text;
    
    if (DateTime.TryParse(hour1Text.Text, out DateTime horaApertura))
    {
        terminal.HoraApertura = horaApertura;
    }
    if (DateTime.TryParse(hour2Text.Text, out DateTime horaCierre))
    {
        terminal.HoraCierre = horaCierre;
    }

    // 直接添加到List,无需管理空位
    Arreglos.terminalesList.Add(terminal);

    // 测试输出
    MessageBox.Show(terminal.HoraCierre.ToString());
    if (Arreglos.terminalesList.Count > 0)
    {
        MessageBox.Show(Arreglos.terminalesList[0].HoraApertura.ToString());
    }
}

内容的提问来源于stack exchange,提问作者jlobo25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 08:30:36