c#中的return _是什么?

本文关键字:是什么 return 中的 | 更新日期: 2023-09-27 18:10:19

我有一个关于c#中从未见过的东西的问题。在新的asp.net依赖注入的服务提供程序中,有一个带有return _ => null;

的方法。

https://github.com/aspnet/DependencyInjection/blob/dev/src/Microsoft.Framework.DependencyInjection/ServiceProvider.cs行63 - 72。

所讨论的方法:

private Func<MyServiceProvider, object> CreateServiceAccessor(Type serviceType)
{
    var callSite = GetServiceCallSite(serviceType, new HashSet<Type>());
    if (callSite != null)
    {
        return RealizeService(_table, serviceType, callSite);
    }
    return _ => null;
}

_是什么?它在c# 6中是新的吗?搜索return _不会返回任何有用的东西,除非你想要命名约定。

c#中的return _是什么?

如果您没有在lambda中使用该参数,则使用_作为表示该参数的约定。

在您的代码中,如果serviceType未解析为调用站点,则它是所有情况。由于您不关心serviceType是否返回null,因此使用_作为该参数。

这可能是这篇有很多信息的文章的副本:

c# style: lambda, _ =>还是x =>?

_是一个有效的c#标识符,所以_ => nullmyServiceProvider => null是一样的

定义什么是有效的标识符并不像检查允许字符的白名单那么简单,但是这里有文档

对于c# 7起,语言(或者更确切地说是编译器)承认单个_表示一个不重要的值的约定:https://learn.microsoft.com/en-us/dotnet/csharp/discards

从c# 7.0开始,c#支持丢弃,这是临时的,在应用程序代码中故意不使用的虚拟变量。丢弃变量等同于未赋值变量;它们没有价值。由于只有一个丢弃变量,而且该变量甚至可能没有分配存储,因此丢弃可以减少内存分配。因为它们使代码的意图清晰,它们增强了代码的可读性和可维护性。

通过为变量赋值下划线(_)作为其名称来指示该变量是废弃的。