public static ReadOnlyListSubject <string> Collect(this DirectoryInfo directory)
        {
            Contract.Requires(directory != null);
            Contract.Ensures(Contract.Result <ReadOnlyListSubject <string> >() != null);

            return(ObservableDirectory.Collect(directory.FullName));
        }
        public static ReadOnlyListSubject <string> Collect(this DirectoryInfo directory, string filter, bool includeSubdirectories)
        {
            Contract.Requires(directory != null);
            Contract.Requires(filter != null);
            Contract.Ensures(Contract.Result <ReadOnlyListSubject <string> >() != null);

            return(ObservableDirectory.Collect(directory.FullName, filter, includeSubdirectories));
        }
        public static ReadOnlyListSubject <string> Collect(this DirectoryInfo directory, string filter, IScheduler scheduler)
        {
            Contract.Requires(directory != null);
            Contract.Requires(filter != null);
            Contract.Requires(scheduler != null);
            Contract.Ensures(Contract.Result <ReadOnlyListSubject <string> >() != null);

            return(ObservableDirectory.Collect(directory.FullName, filter, scheduler));
        }
        public static ReadOnlyListSubject <TResult> Collect <TResult>(
            this DirectoryInfo directory,
            Func <IObservable <CollectionNotification <string> >, IObservable <CollectionModification <TResult> > > selector)
        {
            Contract.Requires(directory != null);
            Contract.Requires(selector != null);
            Contract.Ensures(Contract.Result <ReadOnlyListSubject <TResult> >() != null);

            return(ObservableDirectory.Collect(directory.FullName, selector));
        }
        public static ReadOnlyListSubject <TResult> Collect <TResult>(
            this DirectoryInfo directory,
            string filter,
            bool includeSubdirectories,
            Func <IObservable <CollectionNotification <string> >, IObservable <CollectionModification <TResult> > > selector,
            IScheduler scheduler)
        {
            Contract.Requires(directory != null);
            Contract.Requires(filter != null);
            Contract.Requires(selector != null);
            Contract.Requires(scheduler != null);
            Contract.Ensures(Contract.Result <ReadOnlyListSubject <TResult> >() != null);

            return(ObservableDirectory.Collect(directory.FullName, filter, includeSubdirectories, selector, scheduler));
        }