繁体   English   中英

C#变量问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM