C# 检查类型化对象数组是否为空
我有一个Item[]\u items项目数组,其中一些项目可能为空。我希望检查数组是否包含至少一个非空项 我当前的实现似乎有点复杂:C# 检查类型化对象数组是否为空,c#,arrays,C#,Arrays,我有一个Item[]\u items项目数组,其中一些项目可能为空。我希望检查数组是否包含至少一个非空项 我当前的实现似乎有点复杂: internal bool IsEmtpy { get { return (!(this.NotEmpty)); } } private bool IsNotEmpty { get { return ( this.Items.Any(t => t != null));} } 因此,我的问题是:是否有更简单的方法来检查引用对象的类型化数组是否
internal bool IsEmtpy { get { return (!(this.NotEmpty)); } }
private bool IsNotEmpty { get { return ( this.Items.Any(t => t != null));} }
因此,我的问题是:是否有更简单的方法来检查引用对象的类型化数组是否至少包含一个非空对象?您的实现并不复杂。基本上,检查数组中是否存在非null值的唯一方法是查看所有值,直到到达非null值或数组的末尾 但以下代码更容易理解:
internal bool IsEmtpy { get { return this.Items.All(t => t == null); } }
private bool IsNotEmpty { get { return this.Items.Any(t => t != null); } }
最好扩展IEnumerable
,如下所示:
public static class Extensions {
public static bool ContainsOnlyEmpty<TSource>(this IEnumerable<TSource> source) {
return source.All(t => t == null);
}
public static bool ContainsNonEmpty<TSource>(this IEnumerable<TSource> source) {
return source.Any(t => t != null);
}
}
公共静态类扩展{
公共静态bool ContainsOnlyEmpty(此IEnumerable源){
返回source.All(t=>t==null);
}
公共静态bool ContainsNonEmpty(此IEnumerable源){
返回source.Any(t=>t!=null);
}
}
然后像这样使用它:
bool nonEmpty=this.Items.ContainsNonEmpty()代码>为什么你认为这很复杂?为什么你认为这很复杂?在我看来,它非常清晰紧凑。也许你可以把这个逻辑放到一个自定义扩展方法中,但逻辑本身不会改变。不要同意否决票,这是一个明确的问题。@leppie(和Steve B)我讨厌双重否定。在我的实现中,如果不是空的话,它就是空的:(@adamhuldsworth,谢谢。否决票对我毫无帮助,这也是我退出“程序员”的原因…@leppie,请原谅我糟糕的英语:)没问题,我也得查一下它的意思;p@leppie我记不清这个词,所以我甚至打开字典查找它。。。但后来我完全忘记了它,并提交了答案:)谢谢-这是我一直缺少的“全部”,虽然现在我理解了答案,但我认为双重否定更有效,因为我的大多数数组都是“大部分已满”,所以any not null将返回得更快。@Avi-不,没有性能差异。只要找到非空元素,Any
和All
都会返回。