2014-10-06 156 views
0

我有以下三个定义的类。如何访问嵌套类?

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]“对象refe “}

作为C#的新手,我如何访问嵌套的Entries类?

+1

A“嵌套“类将是另一个类中定义的类。 – crashmstr 2014-10-06 15:09:09

+0

你可以使用['struct EntryRecord'](http://msdn.microsoft.com/en-us/library/ah19swz4.aspx)而不是'class' – Grundy 2014-10-06 15:13:37

+2

@Grundy:是的,但是然后OP会有一个大的可变结构...几乎不是一个更好的情况,海事组织。 – 2014-10-06 15:15:09

回答

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场是静态的,太......静态字段意味着全球性的状态,这是很难测试和推理。)