我有两个功能
func1()
和func2()
。这两个函数都使用 LINQ 查询。我有一个问题,为什么这两个函数不遵循相同的方法。为什么一个产生空结果而另一个则不产生空结果,反之亦然。
static void func1()
{
IEnumerable<char> s = "I am Tommy Shelby";
var query = s.Where(x => x != 'a');
s = "";
foreach (var item in query)
{
Console.Write(item);
}
}
static void func2()
{
List<int> num = new List<int> { 1, 2, 3, 4 };
var query2 = num.Where(x => x % 2 == 0);
num.Clear();
foreach (var item in query2)
{
Console.Write(item);
}
}
目前:
func1() -> I m Tommy Shelby
func2() ->
有人可以帮助我了解 Linq 延迟执行是如何在其中一个中发生而不是在另一个中发生的吗?
区别在于字符串是不可变的。这意味着第一个变量保存一个副本,并且新的赋值在内存中创建一个新变量。列表在这里是引用类型,因此两者都引用相同的事物,因此如果您更改其中一个,另一个也会看到该更改。如果您在清除之前执行了 .ToList(),您仍然会看到数字,因为 ToList 创建了列表的新副本。