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()
或类似的东西。