C# 检查列表是否<;元组<;T、 T>&燃气轮机;是空的

C# 检查列表是否<;元组<;T、 T>&燃气轮机;是空的,c#,collections,tuples,.net-4.5,C#,Collections,Tuples,.net 4.5,我想检查列表是否为空。使用检查列表是否为空的技术,我注意到其中一项检查在我的情况下不起作用: List<Tuple<byte, string>> intermediateResult = new List<Tuple<byte, string>>(); //not working if(intermediateResult!= null) Console.WriteLine("not empty"); else Console.W

我想检查
列表
是否为空。使用检查
列表是否为空的技术,我注意到其中一项检查在我的情况下不起作用:

List<Tuple<byte, string>> intermediateResult = new List<Tuple<byte, string>>();

//not working
if(intermediateResult!= null)
    Console.WriteLine("not empty");
else
    Console.WriteLine("empty");

//working
if(intermediateResult.Any())
Console.WriteLine("not empty");
else
Console.WriteLine("empty");
List intermediateResult=new List();
//不起作用
if(intermediateResult!=null)
控制台。写入线(“非空”);
其他的
控制台。写入线(“空”);
//工作
if(intermediateResult.Any())
控制台。写入线(“非空”);
其他的
控制台。写入线(“空”);

有人能告诉我什么是第一次检查不起作用吗?

不起作用部分的说明:-

它不起作用,因为你正在初始化你的收藏

List<Tuple<byte, string>> intermediateResult = new List<Tuple<byte, string>>();
List intermediateResult=new List();
当您这样初始化时,intermediateResult不为null。这是真的。

这行代码

List<Tuple<byte, string>> intermediateResult = new List<Tuple<byte, string>>();
List intermediateResult=new List();

创建
List
的新实例,并将其分配给
intermediateResult
——因此执行此行后,
intermediateResult
显然不为空。

使用该行,您将检查列表是否已分配。因此,您正在检查新命令的正确行为。
空列表的内存中仍会有地址。

您希望看到什么
intermediateResult
永远不会为空,因为您刚刚分配了一个新实例。?它不是空的,因为你刚刚更新了它?是的,我刚刚测试了网站上的示例,它也不工作。空和空是两个完全不同的东西。如果列表是空的,它不可能是空的,因为它不在那里。因此,您的第二次检查将抛出NullReferenceException。您正在初始化一个空列表,因此第一次检查当然“失败”。