类内的clsss,空引用异常,C#

类内的clsss,空引用异常,C#,c#,C#,我的班级看起来像这样 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 b

我的班级看起来像这样

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
var rows=FindChilds(lvLogConfigTemplate);
foreach(行中的变量行)
{
LogSettings实例=新的LogSettings();
instance.attributeName=row.GroupHeaderText;
var allWarnings=FindChilds(行);
对于(int i=0;i

有人能帮我吗?

日志设置。警告已初始化为数组,但数组元素未初始化

考虑初始化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;
}
公共类日志设置
{
公共日志设置()
{
警告=新警告[3];
对于(int i=0;i当您执行此操作时:

public Warnings[] warnings = new Warnings[3];

您创建了一个数组,其中包含3个警告对象(或者更确切地说是对它们的引用)的空间。它实际上并不创建警告。在这一行之后,警告[0]和所有其他警告一样为空。

这一行不创建任何警告对象:

public Warnings[] warnings = new Warnings[3];
数组中的所有引用都已初始化为null。在尝试访问这些对象上的任何属性之前,您需要先实际创建一些对象:

for (int i = 0; i < warnings.Length; ++i) {
    warnings[i] = new Warnings();
}
for(int i=0;i
在日志设置中,您可以初始化警告数组,但不能初始化数组的元素。您需要初始化每个元素

 for (int i=0;i<3;i++)
     warning[i] = new Warning();
对于(int i=0;i行:

public Warnings[] warnings = new Warnings[3];
仅创建数组,而不是数组中的对象。要在数组中创建
警告的实例,请执行以下操作:

public Warnings[] warnings = 
    Enumerable.Repeat<Warnings>(new Warnings(), 3).ToArray();
公共警告[]警告=
可枚举。重复(新警告(),3)。ToArray();
同样适用于:

public LogSettingActions[] actionItems = 
    Enumerable.Repeat<LogSettingActions>(new LogSettingActions(), 10).ToArray();
公共日志设置操作[]操作项=
可枚举.重复(新的LogSettingActions(),10).ToArray();

必须爱LINQ。

错误在哪里?哪一行?哪一行引发异常?哪一引用是
null
?什么是null?
实例
警告[i]
所有警告[i]
ctlWarningGroupBoxFixedHeader1
Header
?您需要提供更多的信息…您需要添加更多的空检查。获取空引用异常的原因是某些内容实际上为空。您不是在创建新实例,而是在对象上分配了typeOfWarning值,但不是created@user781700字体以前试过什么?我告诉过你你做错了什么。我把它留给你去弄清楚如何做对。