Pro*_*ofK 14 .net c# collections
我厌倦了使用这样的代码:
var count = 0;
if (myEnumerable != null)
{
count = myEnumerable.Count();
}
Run Code Online (Sandbox Code Playgroud)
这有点迂腐:
var count = (myEnumerable ?? new string[0]).Count();
Run Code Online (Sandbox Code Playgroud)
这样做有什么比较整洁的方法吗?我曾经在IEnumerable <>上使用了一个(命名很差的)PhantomCount扩展方法,它使用了我的第一个代码示例,但它有一些关于它的气味(除了名称).
Ano*_*on. 32
问题实际上在于创建这些枚举的任何内容.除非你有充分的理由,否则任何生成可迭代集合的东西都应该返回一个空集合而不是null.这将与Null-Object-Pattern对齐,因此好处是相同的.
我的建议是修复任何产生myEnumerable,或者如果你不能做到这一点,请提前添加一个检查方法,看它是否为空并做出适当的反应.
cor*_*erm 14
怎么样
count = myEnumerable == null? 0 : myEnumerable.Count()
Run Code Online (Sandbox Code Playgroud)
我不认为使用扩展方法是个坏主意.
public static int NullableCount<T>(this IEnumerable<T> collection)
{
return collection == null ? 0 : collection.Count();
}
Run Code Online (Sandbox Code Playgroud)
2019 年,最简洁的方法是var count = myEnumerable?.Count() ?? 0;。
2021年编辑:
public int CountNullable<T>(this IEnumerable<T>? enumerable) =>
enumerable?.Count() ?? 0;
Run Code Online (Sandbox Code Playgroud)
我使用自定义扩展方法:
public static IEnumerable<T> EmptyIfNull<T>(this IEnumerable<T> source)
{
return source ?? Enumerable.Empty<T>();
}
...
int count = myEnumerable.EmptyIfNull().Count();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11537 次 |
| 最近记录: |