我有两个函数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()会创建列表的新副本.

Csharp相关问答推荐

元素存在方法是否损坏

如何使用Automapper映射两个嵌套列表

如何将字节数组转换为字符串并返回?

如何注销Microsoft帐户?

如何模拟耐久任务客户端在统一测试和获取错误在调度NewsListationInstanceAsync模拟设置

如何忽略API JSON响应中的空字符串?

C#-从基类更新子类

Swagger没有显示int?可以为空

VS 2022 for ASP.NET Core中缺少自定义项模板

C#动态设置ServerReport报表参数

为什么我的伺服电机不动,下面的代码?

为什么Azure函数(独立工作进程)索引失败?使用Azure App配置的CosmosDbTrigger绑定失败,未解析为值

WPF动态设置弹出窗口水平偏移

是否可以在Entity Framework Core中使用只读 struct 作为拥有实体?

C#无法将.csv列转换为用于JSON转换的列表

如何在绑定到数据库的datagridview中向上或向下移动行

如何在.NET Core 8中自定义标识用户模型

Azure队列触发器未使用隔离的工作进程执行

SharpZipLib在文件名前加上目录名,生成tar.gz

如何根据分割文本的块数来计算文本的大小?