最近写缓存,缓存的集合在一定时间会被清理,所以经常碰到 “Object reference not set to an instance of an object”,就自己去了解了一下空集合和集合为null的区别,可以看看这篇文章《list集合为空或为null的区别》。
理解区别之后,我们来写个模拟往为null的List集合里添加元素的Demo。
创建一个控制台程序。
代码如下:
static void Main(string[] args)
{
//当一个list为null时
var list = new List<Content>();
list = null;
//定义一个实体
var content = new Content()
{
ContentId = 1,
Num = 1,
Str = "1",
};
//将实体添加到为null的list
list.Add(content);
//输出list
Console.WriteLine(JsonConvert.SerializeObject(list));
}
public class ListById
{
public int ListId { get; set; }
public List<Content> List{ get; set; }
}
public class Content
{
public int ContentId { get; set; }
public int Num { get; set; }
public string Str { get; set; }
}
点击运行,报错:
显示Object reference not set to an instance of an object(对象引用没有设置为一个对象的实例),
list是null。
这种情况出现的原因是因为List集合为null的时候相当于不存在,所以添加不了元素。
用日常生活举例,
当你找不到一个容器的时候,你怎么能往容器里装东西呢?
有非常多的解决方法。我说一下我的方法:
代码:
static void Main(string[] args)
{
//当一个list为null时
var list = new List<Content>();
list = null;
//定义一个实体
var content = new Content()
{
ContentId = 1,
Num = 1,
Str = "1",
};
//临时list
var _list = new List<Content>();
//将实体添加到临时list
_list.Add(content);
//将临时list赋值给list
list=_list;
//输出list
Console.WriteLine(JsonConvert.SerializeObject(list));
}
public class ListById
{
public int ListId { get; set; }
public List<Content> List{ get; set; }
}
public class Content
{
public int ContentId { get; set; }
public int Num { get; set; }
public string Str { get; set; }
}
点击运行,输出结果
我创建了类型相同的临时List集合,变量名为“_list”,用来添加实体“content ” ,
然后再把添加完成的临时List集合“_list”赋值给为null的List集合“list”,
这样就完成了为null的List集合的元素的添加。