C#数组在函数外部可用

问题描述 投票:0回答:3
  private void frmExecute_Load(object sender, EventArgs e)
    {
        string[] data = File.ReadAllLines("c:\\toyotoconsole\\tssetup.txt");

        // Loop through each line, split, add if server
        for (int i = 0; i < data.Length; i++)
        {
                var serverValues = data[i].Split('|');
        }
    }

好第一个C#Windows项目,这很酷,因为除了奇怪的调试工作外,我从未真正接触过此项目。

我的问题是服务器值数组是在函数中内置的,如何使该数组可用于所有函数(不确定是否在此处使用正确的术语),并且使用的是相同格式的脚本(那里的单词也可能是错误的)。有公开声明吗?

c# arrays public
3个回答
1
投票

技术上,您应该将本地variable serverValues转换为field(或property):

  private string[] serverValues = new string[0];

  private void frmExecute_Load(object sender, EventArgs e) {
    ...
    serverValues = data[i].Split('|'); 
    ...
  } 

但是,正如您所看到的,您在循环中重写 serverValues;这就是serverValues仅包含last行拆分的原因。另一个问题是混合业务逻辑ServerValues)和UI(表单加载)。

似乎您想要这样的东西:

using System.Linq;

...

private string[] m_ServerValues = null;

// Pure buiness logic: ServerValues without any UI (form)
public string[] ServerValues {
  get { 
    // If we have the array we return it
    if (m_ServerValues != null)
      return m_ServerValues;

    // otherwise we compute it
    m_ServerValues = File
      .ReadLines("c:\\toyotoconsole\\tssetup.txt")
      .SelectMany(line => line.Split('|'))
      .ToArray();

    // And return it
    return m_ServerValues;
  } 
}

// UI: form loading
private void frmExecute_Load(object sender, EventArgs e) {
  // If you want to prefetch (it's not necessary)
  var values = ServerValues;
} 

0
投票
// Declare a private property in you class 
private serverValues = Array.Empty<string>();

然后在任何事件中使用

private void frmExecute_Load(object sender, EventArgs e)
{
    string[] data = File.ReadAllLines("c:\\toyotoconsole\\tssetup.txt");

    // Loop through each line, split, add if server
    for (int i = 0; i < data.Length; i++)
    {
        serverValues = data[i].Split('|');
    }
}

0
投票
internal class Program
{
    private string[] data;

    private void frmExecute_Load(object sender, EventArgs e)
    {
        this.data = File.ReadAllLines("c:\\toyotoconsole\\tssetup.txt");

        for (int i = 0; i < data.Length; i++)
        {
            var serverValues = data[i].Split('|');
        }
    }


}

要在另一个类中访问它,可以使数组成为公共成员:

public string[] data;
© www.soinside.com 2019 - 2024. All rights reserved.