private IEnumerable <FileSystemItem> GetFileSystemEnumerable(IEnumerable <FileSystemItem> entities) { OnStart(null); var fileSystemItems = entities.ToList(); var filteredEntities = fileSystemItems.Where(_filter).ToList(); foreach (var entity in fileSystemItems) { var isFile = entity.Type == FileSystemItemType.File; var args = new SystemVisitorEventArgs { IsStop = false, IsSkip = false, FoundItem = entity }; if (isFile) { OnFileFound(args); } else { OnDirectoryFound(args); } if (!filteredEntities.Contains(entity)) { continue; } if (isFile) { OnFilteredFileFound(args); } else { OnFilteredDirectoryFound(args); } if (_isStop) { yield break; } if (!_isSkip) { yield return(entity); } } OnFinish(null); }
protected virtual void OnFilteredDirectoryFound(SystemVisitorEventArgs e) { FilteredDirectoryFound?.Invoke(this, e); _isStop = e.IsStop; _isSkip = e.IsSkip; }
protected virtual void OnDirectoryFound(SystemVisitorEventArgs e) => DirectoryFound?.Invoke(this, e);
protected virtual void OnFileFound(SystemVisitorEventArgs e) => FileFound?.Invoke(this, e);
protected virtual void OnFinish(SystemVisitorEventArgs e) => Finish?.Invoke(this, e);
protected virtual void OnStart(SystemVisitorEventArgs e) => Start?.Invoke(this, e);