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 _
不会返回任何有用的东西,除非你想要命名约定。
如果您没有在lambda中使用该参数,则使用_
作为表示该参数的约定。
在您的代码中,如果serviceType
未解析为调用站点,则它是所有情况。由于您不关心serviceType
是否返回null,因此使用_
作为该参数。
这可能是这篇有很多信息的文章的副本:
c# style: lambda, _ =>还是x =>?
_是一个有效的c#标识符,所以_ => null
和myServiceProvider => null
是一样的
定义什么是有效的标识符并不像检查允许字符的白名单那么简单,但是这里有文档
对于c# 7起,语言(或者更确切地说是编译器)承认单个_
表示一个不重要的值的约定:https://learn.microsoft.com/en-us/dotnet/csharp/discards
从c# 7.0开始,c#支持丢弃,这是临时的,在应用程序代码中故意不使用的虚拟变量。丢弃变量等同于未赋值变量;它们没有价值。由于只有一个丢弃变量,而且该变量甚至可能没有分配存储,因此丢弃可以减少内存分配。因为它们使代码的意图清晰,它们增强了代码的可读性和可维护性。
通过为变量赋值下划线(_)作为其名称来指示该变量是废弃的。