为什么IEntityCollection内部/如何找到EntityCollection <t> .Count?</t>

时间:2010-08-03 05:26:39

标签: c# silverlight entity-framework wcf-ria-services

在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会内部?监督?

1 个答案:

答案 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(); 
}