C# Linq:延迟执行

问题描述 投票:0回答:1

我有两个功能

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 延迟执行是如何在其中一个中发生而不是在另一个中发生的吗?

c# .net entity-framework linq
1个回答
0
投票

区别在于字符串是不可变的。这意味着第一个变量保存一个副本,并且新的赋值在内存中创建一个新变量。列表在这里是引用类型,因此两者都引用相同的事物,因此如果您更改其中一个,另一个也会看到该更改。如果您在清除之前执行了 .ToList(),您仍然会看到数字,因为 ToList 创建了列表的新副本。

© www.soinside.com 2019 - 2024. All rights reserved.