public IEnumerable <CatchInfo> Search(string path, string searchPattern, string content) { //var searchWords1 = content.Split(','); var searchWords2 = content.Split(' '); var searchWords = new List <string>(); //searchWords.AddRange(searchWords1); searchWords.AddRange(searchWords2); var files = _fileSystemReader.GetFiles(path, searchPattern); foreach (var file in files) { var lines = _fileSystemReader.ReadLines(file); CatchInfo catchInfo = null; var lineNumber = 0; foreach (var line in lines) { foreach (var searchWord in searchWords) { if (line.Contains(searchWord)) { if (catchInfo == null) { catchInfo = new CatchInfo { FileInfo = new FileInfo(file) }; catchInfo.SearchWordHits = new Dictionary <string, int>(); foreach (var searchWordInit in searchWords) { if (!catchInfo.SearchWordHits.ContainsKey(searchWordInit)) { catchInfo.SearchWordHits.Add(searchWordInit, 0); } } } catchInfo.SearchWordHits[searchWord]++; catchInfo.LineHits.Add(new LineHit() { LineNumber = lineNumber, LineContent = line }); } } lineNumber++; } if (catchInfo != null) { bool allSearchWordsHit = true; foreach (var searchWordHit in catchInfo.SearchWordHits) { if (searchWordHit.Value == 0) { allSearchWordsHit = false; } } if (allSearchWordsHit) { yield return(catchInfo); } } } }