在RIA服务中,EntityCollection<T>
class定义如下:
public sealed class EntityCollection<TEntity> : IEntityCollection,
IEnumerable<TEntity>,
IEnumerable,
INotifyCollectionChanged,
INotifyPropertyChanged where TEntity :
global::System.ServiceModel.DomainServices.Client.Entity
我有一个Silverlight转换器,根据列表中的项目数设置Visibility
。
if (value is EntityCollection<CustomerFeedbackDetail>)
{
visible = (value as EntityCollection<CustomerFeedbackDetail>).Count > 0;
}
但是等等 - 我希望它对任何EntityCollection都是通用的。呃哦 - IEntityCollection
是内部的,我们无法访问。 EntityCollection甚至没有实现ICollection。
我没有使用反射(我真的不愿意这样做,因为在某些情况下这可能会被调用很多次)。
我很确定我必须使用反射来使其成为通用的 - 所以在这种情况下为什么IEntityCollection
会内部?监督?
答案 0 :(得分:3)
您可以自己实现该功能,而不是使用反射。你不关心计数,只是它不是零。只需重写Enumberable.Any(IEnumerable<T>)
函数即可采用非泛型IEnumerable
:
public static bool Any(this System.Collections.IEnumerable source)
{
if (source == null)
throw new ArgumentNullException("source");
return source.GetEnumerator().MoveNext();
}
然后在您的转换器中,您将拥有:
if (value is EntityCollection<CustomerFeedbackDetail>)
{
visible = (value as IEnumerable).Any();
}