在下面的C#代码中,我发现了_()奇怪的用法.有谁能解释这意味着什么?
public static IEnumerable<TSource> DistinctBy<TSource, TKey>(this IEnumerable<TSource> source,
Func<TSource, TKey> keySelector, IEqualityComparer<TKey> comparer)
{
if (source == null) throw new ArgumentNullException(nameof(source));
if (keySelector == null) throw new ArgumentNullException(nameof(keySelector));
return _(); IEnumerable<TSource> _()
{
var knownKeys = new HashSet<TKey>(comparer);
foreach (var element in source)
{
if (knownKeys.Add(keySelector(element)))
yield return element;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*Liu 18
通过在return语句后插入换行符可以更容易地理解代码:
return _();
IEnumerable<TSource> _()
{
var knownKeys = new HashSet<TKey>(comparer);
foreach (var element in source)
{
if (knownKeys.Add(keySelector(element)))
yield return element;
}
}
Run Code Online (Sandbox Code Playgroud)
在此上下文中,下划线只是本地函数的任意名称(这是C#7.0中引入的新功能).如果您愿意,可以使用更具描述性的名称替换下划线:
return DistinctByHelper();
IEnumerable<TSource> DistinctByHelper()
{
var knownKeys = new HashSet<TKey>(comparer);
foreach (var element in source)
{
if (knownKeys.Add(keySelector(element)))
yield return element;
}
}
Run Code Online (Sandbox Code Playgroud)
作为本地函数,_(或DistinctByHelper)方法可以访问该DistinctBy方法的所有变量.
顺便说一句,这里有两个方法的原因是,如果任何参数为null,ArgumentNullException将在DistinctBy调用时立即抛出,而不是在枚举结果时抛出(由于yield return语句的存在).
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |