Faf*_*les 1 c# linq architecture performance-testing
出于好奇, 、 和 之间的根本区别是什么!=null
?Count > 0
什么.Any()
时候是使用它们的最佳时间?- 对于建筑和性能。
我知道这.Any()
是IEnumerable
s,而不是列表,但我发现自己!=null and Count > 0
在允许的情况下可以互换使用它们 ( )。如果这是不好的做法,我不想养成这个习惯。
工作方式Enumerable.Any
如下
public static bool Any<TSource>(this IEnumerable<TSource> source)
{
if (source == null)
throw Error.ArgumentNull(nameof (source));
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
// Returns very early if there are any items
if (enumerator.MoveNext())
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
有一些开销,但实际上并没有那么多,因此我假设Any()
其性能与List<T>.Count
(IEnumerable
扩展尝试回退到该值,因此这也应该具有可比性)相当。
就清晰度而言,它最终归结为品味问题。我个人喜欢 的表现力Any()
,因为它对我来说更接近自然语言。
rows.Any()
Run Code Online (Sandbox Code Playgroud)
让我觉得少于
rows.Count == 0
Run Code Online (Sandbox Code Playgroud)
但没那么多。
null
比较以完全不同的方式进行。如果您不清楚这一点,您应该自行了解 C# 中的值和引用类型(警告:最近情况有所不同,因为null
默认情况下在当前版本的 C#/.NET 中不允许值类型)。
总结:引用类型的存储方式不同,实际变量(有点)只是指向数据存储位置的指针(不是 100% 准确)。传统上,C++ 中的指针可以采用该值0
来指示它们没有指向任何数据,这一点(至少作为一个概念)被延续到了 C#(以及 Java 等其他类似 C 的语言)。无论如何,由于在 C# 中不能直接访问指针,因此null
发明指针是为了指示变量不指向实际数据(“没有与该变量关联的数据”)。因此,将List<int>
变量与进行比较null
意味着您询问列表实例是否已创建,这是必要的,但对于存储的实际列表项来说还不是充分的标准。