Почему не возвращает переменную part хотя условие выполняется?
public static string Searcher(string path, string pattern)
{
var parts = new List<DirectoryInfo> { };
DirectoryInfo dir = new DirectoryInfo(path);
try
{
DirectoryInfo[] dirs = dir.GetDirectories();
foreach (DirectoryInfo di in dirs)
{
parts.Add(di);
}
}
catch { };
foreach (DirectoryInfo part in parts.ToList())
{
if(part.ToString().Contains(pattern) == true)
{
return(part.ToString());
}
else
{
Searcher(part.ToString(), pattern);
}
}
return null;
}
вот так вызываю метод
Console.WriteLine(Searcher(d.Name, "___data___"));
Ответы (1 шт):
Автор решения: Vadim Artyushenko
→ Ссылка
Проблема была в том, что Вы, как и указывал @vitidev, не использовали результат рекурсивного вызова метода. Также есть несколько замечаний:
- Входной параметр у Вас называется path, что наталкивает на мысль, что это путь к директории, но в тоже время Вы кажется передаете в метод имя d.Name.
- Использование блока try...catch кажется можно избежать, достаточно проверить, что директория существует.
- Код испытывает серьезные проблемы с форматированием.
public static string Searcher(string path, string pattern)
{
var parts = new List<DirectoryInfo>();
var dir = new DirectoryInfo(path);
if (!dir.Exists)
return null;
parts.AddRange(dir.GetDirectories());
foreach (var part in parts.Select(x => x.ToString()))
{
if (part.Contains(pattern))
return part;
var result = Searcher(part, pattern);
if (result != null)
return result;
}
return null;
}