Почему не возвращает переменную 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, не использовали результат рекурсивного вызова метода. Также есть несколько замечаний:

  1. Входной параметр у Вас называется path, что наталкивает на мысль, что это путь к директории, но в тоже время Вы кажется передаете в метод имя d.Name.
  2. Использование блока try...catch кажется можно избежать, достаточно проверить, что директория существует.
  3. Код испытывает серьезные проблемы с форматированием.
        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;
        }
→ Ссылка