C#中的return _是什么?

8

我有一个关于 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 _ 并没有返回任何有用的信息,除非你想要命名约定。


这是您的Func参数的名称。 - Jeroen Vannevel
1
return delegate (int _) { return null; }; 相同,其中 _ 是一个未使用的参数(因此不需要给出适当的名称)。 - Eser
3个回答

6

如果您在lambda中没有使用参数,人们通常使用_来表示。

在您的代码中,它是针对serviceType未解析为调用站点的万能情况。由于您不关心serviceType返回null,因此使用_作为该参数。

这可能是此帖子的复制,该帖子具有大量信息:

C#风格:Lambdas,_ => 或 x =>?


感谢提供更详细的链接,现在我明白了,那只是一个变量名而已。之前我以为它有特殊意义,因为这是我第一次看到下划线单独使用。 - Edward Cooke

2

_ 是一个有效的C#标识符,因此 _ => nullmyServiceProvider => null 相同。

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


0

从C#7开始,语言(或者说编译器)认可单个_表示一个不重要的值的约定:https://learn.microsoft.com/en-us/dotnet/csharp/discards

从C# 7.0开始,C#支持discards,这是一种临时的、虚拟的变量,在应用程序代码中有意地未使用。Discards等同于未分配的变量;它们没有值。因为只有一个discard变量,而且该变量甚至可能没有分配存储空间,所以discards可以减少内存分配。因为它们使您的代码意图清晰,所以它们增强了其可读性和可维护性。

通过将下划线(_)作为名称来指示变量是discard。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接