public IEnumerable <T> GetObjects <T>(ObjectId rootId, IConfigDataProvider session, OptionalIdentityData optionalData, out LocalizedString?notFoundReason) where T : IConfigurable, new()
        {
            MailboxDataProvider mailboxDataProvider = (MailboxDataProvider)session;

            if (mailboxDataProvider == null)
            {
                throw new ArgumentNullException("session");
            }
            if (this.objectIdentifier == null)
            {
                QueryFilter queryFilter = new TextFilter(SearchObjectBaseSchema.Name, this.identifier, this.IsFullyQualified ? MatchOptions.FullString : MatchOptions.Prefix, MatchFlags.IgnoreCase);
                if (this.IsFullyQualified)
                {
                    notFoundReason = new LocalizedString?(Strings.ErrorManagementObjectNotFound(this.ToString()));
                }
                else
                {
                    notFoundReason = null;
                }
                if (optionalData != null && optionalData.AdditionalFilter != null)
                {
                    queryFilter = QueryFilter.AndTogether(new QueryFilter[]
                    {
                        queryFilter,
                        optionalData.AdditionalFilter
                    });
                }
                return(mailboxDataProvider.FindPaged <T>(queryFilter, rootId, false, null, 0));
            }
            notFoundReason = new LocalizedString?(Strings.ErrorManagementObjectNotFound(this.ToString()));
            SearchObjectId identity = this.objectIdentifier;

            if (optionalData != null && optionalData.AdditionalFilter != null)
            {
                throw new NotSupportedException("Supplying Additional Filters and an ObjectIdentifier is not currently supported by this IdParameter.");
            }
            int num = this.identifier.IndexOf('\\');

            if (num == -1 || string.IsNullOrEmpty(this.identifier.Substring(0, num)))
            {
                SearchObjectBase searchObjectBase = ((default(T) == null) ? Activator.CreateInstance <T>() : default(T)) as SearchObjectBase;
                if (searchObjectBase == null)
                {
                    throw new ArgumentException("The generic type must be a SearchObjectBase");
                }
                identity = new SearchObjectId(identity, searchObjectBase.ObjectType);
            }
            T t = (T)((object)mailboxDataProvider.Read <T>(identity));

            if (t != null)
            {
                return(new T[]
                {
                    t
                });
            }
            return(new T[0]);
        }