use*_*000 7 .net c# linq algorithm
当我需要执行以下操作时,我试图找出 LINQ 的正确约定是什么
"No items"
我想这样做的方式就像
if (items.Any())
{
foreach (string item in items)
{
Console.WriteLine(item);
}
}
else
{
Console.WriteLine("No items");
}
Run Code Online (Sandbox Code Playgroud)
然而,这在技术上违反了多重枚举原则。一种不违反这一点的方法是
bool any = false;
foreach (string item in items)
{
any = true;
Console.WriteLine(item);
}
if (!any)
{
Console.WriteLine("No items");
}
Run Code Online (Sandbox Code Playgroud)
但显然,这不太优雅。
Owe*_*ing -1
这可能是也可能不是问题,具体取决于您的用例,因为一旦满足条件,Any() 就会短路,这意味着不需要枚举整个 IEnumerable。
请注意下面的评论,其中指出了潜在的陷阱,例如仅向前实施或昂贵的实施。
这是参考来源:
public static bool Any<TSource>(this IEnumerable<TSource> source) {
if (source == null) throw Error.ArgumentNull("source");
using (IEnumerator<TSource> e = source.GetEnumerator()) {
if (e.MoveNext()) return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1006 次 |
最近记录: |