将类实例添加到类列表属性时,该类实例为null

时间:2018-01-08 05:54:37

标签: c# class collections console-application pass-by-reference

我有一个简单的C#控制台应用程序。

它有三个类。

public class Song
{
   public string SongName {get; set;}
   public int TrackNumber { get; set; }
}

public class Album
{
    public string AlbumName { get; set; }
    public List<Song> Songs { get; set; }
    public Artist AlbumArtist { get; set; }
}

public class Artist
{
    public string Name { get; set; }
}

这是主要功能

        static void Main(string[] args)
    {
        Album SFG = new Album();
        SFG.AlbumName = "Searching For Gold";

        Song Intro = new Song();
        Intro.SongName = "Intro";
        Intro.TrackNumber = 1;

        SFG.Songs.Add(Intro);
    }

当代码获取到最后一行时,它会抛出一个空引用异常,并且消息对象引用未设置为对象的实例。

我一直在寻找,但我不确定如何谷歌这回来的结果不是我想要的。

我认为可能存在一条我可能不理解或不了解的语言的基本规则。但我找不到合适的文章来解释发生了什么或者它叫什么的概念

谢谢

2 个答案:

答案 0 :(得分:2)

  

它会抛出一个带有消息的空引用异常:

     

未将对象引用设置为对象的实例

那是因为您的Songs集合为null,并且以下行存在错误。

    SFG.Songs.Add(Intro);

您已在类中声明了它,但尚未在运行时将其声明。

试试这个:

public class Album
{
    public string AlbumName { get; set; }
    public List<Song> Songs { get; set; } = new List<Song>; // instantiate via new
    public Artist AlbumArtist { get; set; }
}

答案 1 :(得分:2)

确保在使用前初始化Songs

public class Album
{
    public string AlbumName { get; set; }
    public List<Song> Songs { get; set; }
    public Artist AlbumArtist { get; set; }
    public Album(){
         Songs = new List<Song>();
    }
}