/// <summary>
 /// Checks whether the entry matches the filtering predicate.
 /// </summary>
 /// <param name="predicate">The filtering predicate.</param>
 /// <returns>
 ///     <c>true</c> if entry matches predicate; otherwise, <c>false</c>.
 /// </returns>
 public override bool MatchesPredicate(PropertyFilterPredicate predicate)
 {
     if (predicate == null)
     {
         return(false);
     }
     if (!predicate.Match(this.DisplayName))
     {
         return((PropertyType != null)
   ? predicate.Match(PropertyType.Name)
   : false);
     }
     return(true);
 }
 /// <summary>
 /// Checks whether the entry matches the filtering predicate.
 /// </summary>
 /// <param name="predicate">The filtering predicate.</param>
 /// <returns>
 ///     <c>true</c> if entry matches predicate; otherwise, <c>false</c>.
 /// </returns>
 public override bool MatchesPredicate(PropertyFilterPredicate predicate)
 {
     return(_properties.All(property => property.MatchesPredicate(predicate)));
 }
 /// <summary>
 /// Checks whether the entry matches the filtering predicate.
 /// </summary>
 /// <param name="predicate">The filtering predicate.</param>
 /// <returns><c>true</c> if entry matches predicate; otherwise, <c>false</c>.</returns>
 public abstract bool MatchesPredicate(PropertyFilterPredicate predicate);