因此,通常如果您想简单地检查是否IEnumerable<T>
有任何项目可以使用.Any()
而不是.count > 0
- 特别是当您遇到诸如 LINQ-To-Entities 之类的东西并且.count
可能会产生严重的性能损失时。
我遇到的问题是我正在编写一个IValueConverter
根据可枚举项是否具有项目来更改对象可见性的方法:
public class CollectionEmptyVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
var col = value as ICollection;
if (col == null) { return Visibility.Collapsed.ToString(); }
return (col.Count > 0) ? Visibility.Visible.ToString() : Visibility.Collapsed.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
所以在这种情况下,我不能在 an 上使用正常的扩展方法,IEnumerable<T>
因为此时我不能拥有 a <T>
。我目前的实现将我限制在那些ICollection
可能并不总是理想的实现上。
我怎样才能以更有效的方式做到这一点?裸露的IEnumerable
(sans <T>
) 没有.Any()
.