C# 为什么我不能将此对象添加到此列表中?

C# 为什么我不能将此对象添加到此列表中?,c#,C#,我是C语言的新手,在尝试将对象插入集合时遇到以下问题 因此,我有一个名为VulnSmall的基类,它包含一些属性,然后我有一个名为Vuln的类,它扩展了以前的VulnSmall类,并向其中添加了一些属性,包括名为VulnerabilityReferences的列表,如以下代码段所示: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threadin

我是C语言的新手,在尝试将对象插入集合时遇到以下问题

因此,我有一个名为VulnSmall的基类,它包含一些属性,然后我有一个名为Vuln的类,它扩展了以前的VulnSmall类,并向其中添加了一些属性,包括名为VulnerabilityReferences的列表,如以下代码段所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataModel.Vulnerability
{
    public class Vuln : VulnSmall
    {
        .......................
        .......................
        .......................
        public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; }    

        .......................
        .......................
        .......................

    }
}
如您所见,我有一个名为currentNVDVuln的Vuln对象,其中包含VulnerabilityReferences列表作为其字段,我创建了一个名为currentVulnRef的VulnerabilityReference对象,并尝试将其添加到此列表中

但不工作,当尝试执行此行时:

currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef);
它将出错并引发此异常:

{对象引用未设置为对象的实例。} System.Exception{System.NullReferenceException}

为什么??有什么问题吗?我缺少什么?

您应该初始化VulnerabilityReference,如果您在构造函数中这样做会更好:

public class Vuln : VulnSmall
{
    public Vuln()
    {
       VulnerabilityReferences = new List<VulnerabilityReference>();
    } 
}
您应该初始化VulnerabilityReference,最好在构造函数中进行初始化:

public class Vuln : VulnSmall
{
    public Vuln()
    {
       VulnerabilityReferences = new List<VulnerabilityReference>();
    } 
}
您没有初始化漏洞引用列表。所以它有空值,当您试图调用它的Add方法时,它抛出异常。您可以在Vuln类的构造函数中创建新列表:

从具有自动实现属性的C规范中,您仍然有字段,但它是由编译器为您生成的:

字段的初始值,无论是静态字段还是静态字段 实例字段,是该字段的 类型

列表是引用类型,因此默认情况下它的值为null。

您没有初始化VulnerabilityReferences列表。所以它有空值,当您试图调用它的Add方法时,它抛出异常。您可以在Vuln类的构造函数中创建新列表:

从具有自动实现属性的C规范中,您仍然有字段,但它是由编译器为您生成的:

字段的初始值,无论是静态字段还是静态字段 实例字段,是该字段的 类型

列表是引用类型,因此默认情况下它的值为null。

在Vulnclass的构造函数中,您需要执行以下操作:

public Vuln()
{
   VulnerabilityReferences  = new List<VulnerabilityReference>();
}
在Vulnclass的构造函数中,您需要执行以下操作:

public Vuln()
{
   VulnerabilityReferences  = new List<VulnerabilityReference>();
}

您正在尝试向列表中添加尚不存在的内容

仅定义列表属性是不够的,还必须初始化它。例如:

public class Vuln : VulnSmall
{
    public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; } 

    public Vuln()
    {
        this.VulnerabilityReferences = new List<VulnerabilityReference>();
    }
}

您正在尝试向列表中添加尚不存在的内容

仅定义列表属性是不够的,还必须初始化它。例如:

public class Vuln : VulnSmall
{
    public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; } 

    public Vuln()
    {
        this.VulnerabilityReferences = new List<VulnerabilityReference>();
    }
}

由于对列表的引用为null,因此会出现null引用异常。您只有列表的引用,您必须在某个点创建实际列表:

VulnerabilityReferences = new List<VulnerabilityReference>();
例如,您可以在类的构造函数中执行此操作:

public class Vuln : VulnSmall {

  public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; }    

  public Vuln(){
    VulnerabilityReferences = new List<VulnerabilityReference>();
  }

}

由于对列表的引用为null,因此会出现null引用异常。您只有列表的引用,您必须在某个点创建实际列表:

VulnerabilityReferences = new List<VulnerabilityReference>();
例如,您可以在类的构造函数中执行此操作:

public class Vuln : VulnSmall {

  public virtual List<VulnerabilityReference> VulnerabilityReferences { get; set; }    

  public Vuln(){
    VulnerabilityReferences = new List<VulnerabilityReference>();
  }

}
您应该创建一个列表以将项目插入:

...

currentNVDVuln.VulnerabilityReferences = new List<VulnerabilityReference> VulnerabilityReferences();

currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef);
您应该创建一个列表以将项目插入:

...

currentNVDVuln.VulnerabilityReferences = new List<VulnerabilityReference> VulnerabilityReferences();

currentNVDVuln.VulnerabilityReferences.Add(currentVulnRef);

调试器呢?您是否尝试过调试的异常可能重复顺便问一下,为什么该属性是虚拟的?调试器呢?你试过调试的例外可能重复顺便问一下,为什么该属性是虚拟的?