我的班级看起来像这样。
public class LogSettings
{
public string attributeName { get; set; }//TODO: change the variable name
public Warnings[] warnings = new Warnings[3];
}
public class Warnings
{
public string typeOfWarning {get; set;}
public bool isAbsolute { get; set; }
public decimal numUpDownValue { get; set; }
public LogSettingActions[] actionItems = new LogSettingActions[10];
}
public class LogSettingActions
{
public string actionItem{ get; set;}
}
但是当我尝试创建Warnings实例时,它会抛出NullReference错误。
var rows = FindChilds<ctlLogConfigRow>(lvLogConfigTemplate);
foreach (var row in rows)
{
LogSettings instance = new LogSettings();
instance.attributeName = row.GroupHeaderText;
var allWarnings = FindChilds<ctlWarnings>(row);
for (int i = 0; i < allWarnings.Count; i++)
{
instance.warnings[i].typeOfWarning = allWarnings[i].ctlWarningGroupBoxFixedHeader1.Header.ToString();//It throws error here
有人能帮助我吗?
答案 0 :(得分:5)
LogSettings.warnings
初始化为数组,但数组元素未初始化。
考虑在LogSettings构造函数中初始化数组项:
public class LogSettings
{
public LogSettings()
{
warnings = new Warnings[3];
for (int i=0; i<warnings.Length; i++)
{
warnings[i] = new Warnings();
}
}
public string attributeName { get; set; }//TODO: change the variable name
public Warnings[] warnings;
}
答案 1 :(得分:2)
此行不会创建任何警告对象:
public Warnings[] warnings = new Warnings[3];
数组中的所有引用都初始化为null。在尝试访问这些对象的任何属性之前,您需要先实际创建一些对象:
for (int i = 0; i < warnings.Length; ++i) {
warnings[i] = new Warnings();
}
答案 2 :(得分:1)
执行此操作时:
public Warnings[] warnings = new Warnings[3];
您创建一个包含3个警告对象空间的数组(或者更确切地说是对它们的引用)。它实际上并不创建警告。在此行之后,警告[0]为空,与所有其他行一样。
答案 3 :(得分:0)
在日志设置中,您初始化警告数组,但不是数组的元素。您需要初始化每个元素。
for (int i=0;i<3;i++)
warning[i] = new Warning();
答案 4 :(得分:0)
该行:
public Warnings[] warnings = new Warnings[3];
仅创建数组,而不是数组中的对象。要在数组中创建Warnings
的实例,请执行以下操作:
public Warnings[] warnings =
Enumerable.Repeat<Warnings>(new Warnings(), 3).ToArray();
与之相同:
public LogSettingActions[] actionItems =
Enumerable.Repeat<LogSettingActions>(new LogSettingActions(), 10).ToArray();
得爱LINQ。