2014-10-06 155 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場是靜態的,太......靜態字段意味着全球性的狀態,這是很難測試和推理。)