所以通常如果你想简单地检查一下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();
}
}
所以在这种情况下,我无法使用正常的扩展方法在IEnumerable<T>
,因为我目前不能有<T>
。我目前的实施限制了我实现ICollection
的事情,这可能并不总是令人满意的。
我该如何以更高效的方式做到这一点?裸体IEnumerable
(无框<T>
)没有.Any()
。
就问后,我结束了'col.GetEnumerator()调用MoveNext()'该作品,以及 - 问题的存在会更加快捷。?授予这两个文本中的一个非常接近的电话。在任何情况下都将标记为正确。 – PhonicUK
@PhonicUK由于枚举器实现了'IDisposable',所以你不应该这样做。你可以将它封装在一个使用中,并返回'MoveNext()'以确保它被丢弃。 –
@TimS。我很困惑 - “IEnumerator”不是“IDisposable”。 –