[英]How to break out recursive call
如何分解遞歸如下:
調用GetDirectory("D:\\Engine\\", "102")
預期輸出:D:\\ Engine \\ Type \\ Tone_Id_102
當前,輸出為null。
非常感謝。
private static string GetDirectory(string folderPath, string number)
{
foreach (string directory in Directory.GetDirectories(folderPath))
{
if (directory.Contains(number))
{
return directory;
}
GetDirectory(directory, number);
}
return null;
}
做起來會不會更容易更好
return Directory.EnumerateDirectories(
folderPath,
"*",
SearchOption.AllDirectories)
.FirstOrDefault(s => s.Contains(number))
或@TimSchmelter建議,
return Directory.EnumerateDirectories(
folderPath,
string.Format("*{0}*", number),
SearchOption.AllDirectories)
.FirstOrDefault()
我認為您只需要return
:
return GetDirectory(directory, number);
但是,這將迭代foreach
一個條目,因此會更好:
private static string GetDirectory(string folderPath, string number)
{
foreach (string directory in Directory.GetDirectories(folderPath))
{
if (directory.Contains(number))
{
return directory;
}
string result = GetDirectory(directory, number);
if (!string.IsNullOrEmpty(result))
{
return result;
}
}
return null;
}
應該這樣做:
private static string GetDirectory(string folderPath, string number)
{
foreach (string directory in Directory.GetDirectories(folderPath))
{
if (directory.Contains(number))
return directory;
var innerDir = GetDirectory(directory, number);
if (innerDir != null)
return innerDir;
}
return null;
}
這做同樣的事情,我認為它更具可讀性:
Directory.GetDirectories(folderPath, "*.*", SearchOption.AllDirectories)
.FirstOrDefault(x => x.Contains(number));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.