C# 如何访问嵌套类?

C# 如何访问嵌套类?,c#,C#,我定义了以下三个类 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 Fre

我定义了以下三个类

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#的新手,如何访问嵌套条目类?

问题是您创建了一个数组,但该数组一开始就充满了空引用。你需要一些类似的东西:

EntryRecord record = new EntryRecord();
record.Name = "Peter";
IntProfile.Entries[1] = record;
用对新创建的
EntryRecord
的引用替换数组元素

如果您将
条目
更改为
列表
,并且只使用:

EntryRecord record = new EntryRecord();
record.Name = "Peter";
IntProfile.Entries.Add(record);
或者更简单地说,使用对象初始化器:

IntProfile.Entries.Add(new EntryRecord { Name = "Peter" });
我还强烈建议不要使用公共字段;使用属性替代,并考虑如果可能的话,使类型不可变。


(我鼓励您考虑是否真的需要
IntProfile
字段也是静态的……静态字段意味着全局状态,这更难测试和推理。)

问题是您创建了一个数组,但该数组一开始就充满了空引用。你需要一些类似的东西:

EntryRecord record = new EntryRecord();
record.Name = "Peter";
IntProfile.Entries[1] = record;
用对新创建的
EntryRecord
的引用替换数组元素

如果您将
条目
更改为
列表
,并且只使用:

EntryRecord record = new EntryRecord();
record.Name = "Peter";
IntProfile.Entries.Add(record);
或者更简单地说,使用对象初始化器:

IntProfile.Entries.Add(new EntryRecord { Name = "Peter" });
我还强烈建议不要使用公共字段;使用属性替代,并考虑如果可能的话,使类型不可变。


(我鼓励您考虑是否真的需要
IntProfile
字段也是静态的……静态字段意味着全局状态,这更难测试和推理。)

一个“嵌套”类将是另一个类中定义的
类。您可以使用而不是
类,但是OP会有一个大的可变结构。。。几乎不是更好的情况,我想。@JonSkeet yep,这只是另一种方式:-)@Grundy:除非您使用
可枚举的范围(0,100)。选择(x=>new EntryRecord()).ToArray()
或类似的东西。“嵌套”类将是另一个类中定义的
类。您可以使用而不是
@Grundy:Yes,但是OP会有一个大的可变结构。。。几乎不是更好的情况,依我看。@JonSkeet yep,这只是另一种方式:-)@Grundy:除非您使用
Enumerable.Range(01100)。选择(x=>new EntryRecord()).ToArray()
或类似的东西。