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项目,这很酷,因为除了奇怪的调试工作外,我从未真正接触过此项目。
我的问题是服务器值数组是在函数中内置的,如何使该数组可用于所有函数(不确定是否在此处使用正确的术语),并且使用的是相同格式的脚本(那里的单词也可能是错误的)。有公开声明吗?
技术上,您应该将本地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;
}
// 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('|');
}
}
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;