[英]C# variable issue
一些C#变量有问题。 无法弄清楚我在做什么错。 可能有些简单,但是我已经做了一段时间了。
public class DataFileLoad
{
//Public jagged array variables
public string[][] aConfJag = null;
public string[][] aPartJag = null;
public string[][] aTypeJag = null;
public string[][] aWkshpJag = null;
public string[][] aWorkJag = null;
public void loadFiles()
{
//The path of our exectuable
string exePath = Application.StartupPath;
//Set our working directory to our exe path for file reading
Directory.SetCurrentDirectory(exePath);
string[] aConferences = File.ReadAllLines(@"DATA\CONFERENCES.txt");
string[] aParticipants = File.ReadAllLines(@"DATA\PARTICIPANTS.txt");
string[] aType = File.ReadAllLines(@"DATA\TYPE.txt");
string[] aWkshpReg = File.ReadAllLines(@"DATA\WKSHP_REGISTRATIONS.txt");
string[] aWorkshops = File.ReadAllLines(@"DATA\WORKSHOPS.txt");
//Make our arrays jagged for easier processing
string[][] aConfJag = aConferences.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aPartJag = aParticipants.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aTypeJag = aType.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aWkshpJag = aWkshpReg.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aWorkJag = aWorkshops.Select(line => line.Split(',').ToArray()).ToArray();
}
}
当我尝试从另一个类访问变量时,它们显示为null并引发异常。
public void updateFormData()
{
//Participant Type
var data = new DataFileLoad();
data.loadFiles();
foreach(string[] e in data.aTypeJag)
{
MessageBox.Show(e[1]);
comboConference.Items.Add(e[1]);
}
}
System.NullReferenceException was unhandled HResult=-2147467261 Message=Object reference not set to an instance of an object. Source=FBLA_App
是我得到的。 有什么想法吗? 不太确定为什么我会得到空变量。
问题是您正在loadFiles
方法中定义新变量。
改为这样做:
public class DataFileLoad
{
//Public jagged array variables
public string[][] aConfJag = null;
public string[][] aPartJag = null;
public string[][] aTypeJag = null;
public string[][] aWkshpJag = null;
public string[][] aWorkJag = null;
public void loadFiles()
{
//The path of our exectuable
string exePath = Application.StartupPath;
//Set our working directory to our exe path for file reading
Directory.SetCurrentDirectory(exePath);
string[] aConferences = File.ReadAllLines(@"DATA\CONFERENCES.txt");
string[] aParticipants = File.ReadAllLines(@"DATA\PARTICIPANTS.txt");
string[] aType = File.ReadAllLines(@"DATA\TYPE.txt");
string[] aWkshpReg = File.ReadAllLines(@"DATA\WKSHP_REGISTRATIONS.txt");
string[] aWorkshops = File.ReadAllLines(@"DATA\WORKSHOPS.txt");
//Make our arrays jagged for easier processing
aConfJag = aConferences.Select(line => line.Split(',').ToArray()).ToArray();
aPartJag = aParticipants.Select(line => line.Split(',').ToArray()).ToArray();
aTypeJag = aType.Select(line => line.Split(',').ToArray()).ToArray();
aWkshpJag = aWkshpReg.Select(line => line.Split(',').ToArray()).ToArray();
aWorkJag = aWorkshops.Select(line => line.Split(',').ToArray()).ToArray();
}
}
我也强烈建议 ,由于是你不公开这些变量。 而是将它们封装在只读属性中,以便不能从DataFileLoad
类外部更改其值。
您通过重新声明来“隐藏”类字段。 只需摘下声明:
//Make our arrays jagged for easier processing
aConfJag = aConferences.Select(line => line.Split(',').ToArray()).ToArray();
aPartJag = aParticipants.Select(line => line.Split(',').ToArray()).ToArray();
aTypeJag = aType.Select(line => line.Split(',').ToArray()).ToArray();
aWkshpJag = aWkshpReg.Select(line => line.Split(',').ToArray()).ToArray();
aWorkJag = aWorkshops.Select(line => line.Split(',').ToArray()).ToArray();
更改
string[][] aConfJag = aConferences.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aPartJag = aParticipants.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aTypeJag = aType.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aWkshpJag = aWkshpReg.Select(line => line.Split(',').ToArray()).ToArray();
string[][] aWorkJag = aWorkshops.Select(line => line.Split(',').ToArray()).ToArray();
至
aConfJag = aConferences.Select(line => line.Split(',').ToArray()).ToArray();
aPartJag = aParticipants.Select(line => line.Split(',').ToArray()).ToArray();
aTypeJag = aType.Select(line => line.Split(',').ToArray()).ToArray();
aWkshpJag = aWkshpReg.Select(line => line.Split(',').ToArray()).ToArray();
aWorkJag = aWorkshops.Select(line => line.Split(',').ToArray()).ToArray();
您正在创建新变量,而不是将其分配给您的类级变量
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.