我定义了以下三个类。
public class FrequencyRecord
{
public double Frequency;
public int Duration;
}
public class EntryRecord
{
public string Name;
public Boolean Status;
public long TotalTime;
public FrequencyRecord[] FreqTime = new FrequencyRecord[25];
public string Description;
}
public class Salv7Profile
{
public string Version;
public string SoftVersion;
public string Name;
public DateTime CreateDate;
public DateTime LastModDate;
public int Count;
public EntryRecord[] Entries = new EntryRecord[99];
public int Type;
}
然后我创建一个实例:
public static Salv7Profile IntProfile = new Salv7Profile();
将值分配给:
IntProfile.Name = "Peter";
工作正常,但如果我尝试:
IntProfile.Entries[1].Name = "Peter";
抛出错误:[System.NullReferenceException]“对象引用未设置为对象的实例。”}
作为C#的新手,如何访问嵌套的Entries类?
答案 0 :(得分:5)
问题在于您已经创建了一个数组,但该数组只是以空引用开头。你需要这样的东西:
EntryRecord record = new EntryRecord();
record.Name = "Peter";
IntProfile.Entries[1] = record;
使用对新创建的EntryRecord
的引用替换数组元素。
如果您将Entries
更改为List<EntryRecord>
,那几乎肯定会更好,并且只是使用了:
EntryRecord record = new EntryRecord();
record.Name = "Peter";
IntProfile.Entries.Add(record);
或更简单地说,使用对象initialzier:
IntProfile.Entries.Add(new EntryRecord { Name = "Peter" });
我也强烈建议不要使用公共字段;请改用属性,如果可以,请考虑使您的类型不可变。
(我鼓励思考你是否真的需要IntProfile
字段也是静态的...静态字段意味着全局状态,这更难测试和理由。)