简体   繁体   English

C#变量问题

[英]C# variable issue

Having problems with some c# variables. 一些C#变量有问题。 Can't figure out what i'm doing wrong. 无法弄清楚我在做什么错。 Probably something simple but i've been at it for a bit. 可能有些简单,但是我已经做了一段时间了。

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();
    }
}

And when I try to access the variables from another class they come up as null and it throws an exception. 当我尝试从另一个类访问变量时,它们显示为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 

Is what I get. 是我得到的。 Thoughts? 有什么想法吗? Not quite sure why i'm getting null variables. 不太确定为什么我会得到空变量。

The problem is that you are defining new variables inside the loadFiles method. 问题是您正在loadFiles方法中定义新变量。

Do this instead: 改为这样做:

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();
    }
}

I would also strongly recommend that you do NOT expose these variables as is. 我也强烈建议 ,由于是你公开这些变量。 Encapsulate them in readonly properties instead so that their value cannot be changed from outside the DataFileLoad class. 而是将它们封装在只读属性中,以便不能从DataFileLoad类外部更改其值。

you're "hiding" the class fields by re-declaring them. 您通过重新声明来“隐藏”类字段。 just take off the declaration: 只需摘下声明:

    //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();

Change 更改

        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();

to

       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();

You were creating new variable rather than assigning them to you class level variables 您正在创建新变量,而不是将其分配给您的类级变量

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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