gpt4 book ai didi

c# - 为什么 `using System.Linq` 为其他库添加功能

转载 作者:太空宇宙 更新时间:2023-11-03 18:09:02 25 4
gpt4 key购买 nike

我已经使用 C# 多年了,但是我有点懒得去了解它引入的所有新功能。 Linq 可能是主要功能之一,但我一直不了解它的好处。但没关系,我现在感兴趣的是将 using System.Linq 语句添加到文件时发生的黑魔法。

最近我一直在使用 C# 中的 MongoDB,我想从数据库中检索单个文档。这是如何完成的:

var cursor = colletion.FindAs<Entity>(query).SetLimit(1);
var en = cursor.Single<Entity>();

上面的代码从集合中提取了一个 Entity 类型的文档。令我惊讶的部分是,仅当将 using System.Linq 添加到文件时,才能识别游标的 Single 方法。这怎么可能?

最佳答案

那是因为 Single是一个 extension method .

扩展方法是静态类中的静态方法,它们的第一个输入参数用this标记。关键词。示例:

namespace System.Linq 
{
public static class Enumerable
{
public static IEnumerable<T> Single<T>(this IEnumerable<T> source)
{
...
}
}
}

当编译器看到 a.Single()其中 a是一个 IEnumerable<T>并且无法在该对象上找到这样的方法,它将搜索采用 IEnumerable<T> 的扩展方法在它的第一个参数中。

为了使此解决方案起作用,公开扩展方法的静态类 Enumerable需要在范围内,您可以通过导入 System.Linq 将其纳入范围命名空间。

关于c# - 为什么 `using System.Linq` 为其他库添加功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20159476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com