C# 在c中向对象中的列表添加对象#

C# 在c中向对象中的列表添加对象#,c#,C#,我正在尝试向c中的对象添加一个字符串,如下所示: 课程为: class thing { public int somenumber { get; set; } public int someothernumber { get; set; } public List<string> words { get; set; } } 如何将字符串添加到列表“words”中而不出现null引用错误?您必须首先创建一个列表,因为默认情况下words将为null var s

我正在尝试向c中的对象添加一个字符串,如下所示: 课程为:

class thing
{
    public int somenumber { get; set; }
    public int someothernumber { get; set; }
    public List<string> words { get; set; }
}

如何将字符串添加到列表“words”中而不出现null引用错误?

您必须首先创建一个列表,因为默认情况下
words
将为null

var something = new thing();
something.words = new List<string>();
现在当
something.words
指向新创建的列表时,不会为空

另一种更一致的方法是在类构造函数中创建该列表:

public class Thing
{
    public int SomeNumber { get; set; }
    public int SomeOtherNumber { get; set; }
    public List<string> Words { get; set; }

    public Thing() 
    {
        Words = new List<string>();
    }
}
公共类的东西
{
公共int SomeNumber{get;set;}
公共int SomeOtherNumber{get;set;}
公共列表字{get;set;}
公共事物
{
单词=新列表();
}
}
顺便说一句,请同时查看命名约定(例如,属性名称以大写字母开头以及类名)

更新

正如他在评论中正确提到的,还有另一种方法(可能更好)来做同样的事情:

public class Thing
{
   public int SomeNumber { get; set; }
   public int SomeOtherNumber { get; set; }
   public List<string> Words { get; } = new List<string>();
}
公共类的东西
{
公共int SomeNumber{get;set;}
公共int SomeOtherNumber{get;set;}
公共列表单词{get;}=new List();
}

这样,我们就创建了一个只读列表。基本上,当我们创建此类的实例时,会创建一个新的字符串列表,并将其引用分配给单词backing字段。从那一刻起,您就不能更改存储在该支持字段中的引用,您只能将列表用于添加/删除内容,您不能更改它的引用。

您必须首先创建一个列表,因为默认情况下
单词
将为空

var something = new thing();
something.words = new List<string>();
现在当
something.words
指向新创建的列表时,不会为空

另一种更一致的方法是在类构造函数中创建该列表:

public class Thing
{
    public int SomeNumber { get; set; }
    public int SomeOtherNumber { get; set; }
    public List<string> Words { get; set; }

    public Thing() 
    {
        Words = new List<string>();
    }
}
公共类的东西
{
公共int SomeNumber{get;set;}
公共int SomeOtherNumber{get;set;}
公共列表字{get;set;}
公共事物
{
单词=新列表();
}
}
顺便说一句,请同时查看命名约定(例如,属性名称以大写字母开头以及类名)

更新

正如他在评论中正确提到的,还有另一种方法(可能更好)来做同样的事情:

public class Thing
{
   public int SomeNumber { get; set; }
   public int SomeOtherNumber { get; set; }
   public List<string> Words { get; } = new List<string>();
}
公共类的东西
{
公共int SomeNumber{get;set;}
公共int SomeOtherNumber{get;set;}
公共列表单词{get;}=new List();
}
这样,我们就创建了一个只读列表。基本上,当我们创建此类的实例时,会创建一个新的字符串列表,并将其引用分配给单词backing字段。从那一刻起,您不能更改存储在该备份字段中的引用,您只能将列表用于添加/删除内容,您不能更改它的引用

  • 初始化类构造函数中的
    words
    列表,以确保它将存在
  • 初始化类构造函数中的
    words
    列表,以确保它将存在

  • 单词是空的。您必须通过调用构造函数来初始化它
    something.words=newlist()这是否回答了您的问题?单词是空的。您必须通过调用构造函数来初始化它
    something.words=newlist()这是否回答了您的问题?我怀疑更好的实现应该是
    publicslist单词{get;}=newlist()
    (因此不能有人来将
    单词设置为空)。我同意,我也将添加此项。ThanksI怀疑更好的实现是
    公共列表单词{get;}=new List()
    (因此不能有人来将
    单词设置为空)。我同意,我也将添加此项。谢谢
    
    public void YourMethod {
        words.Add("New Item");
    }