private MemberCacheDescriptor ToDescriptor(Filter filter)
        {
            var result = new MemberCacheDescriptor();
              switch (filter.FilterBy)
              {
            case FilterBy.BindingFlags:
              result.BindingFlags = filter.BindingFlags;
              break;
            case FilterBy.Name:
              result.Name = filter.Name;
              break;
            case FilterBy.Type:
              result.Type = filter.Type;
              break;
            case FilterBy.MemberType:
              result.MemberTypes = filter.MemberTypes;
              break;
            default:
              throw new ArgumentOutOfRangeException();
              }

              return result;
        }
 private void ProcessCondition(FilterExpression filterExpression, FilterGroup root)
 {
     var filter = new Filter();
       root.Filters.Push(filter);
       filter.FilterExpression = filterExpression;
 }