gpt4 book ai didi

c# - 为什么这个函数没有返回任何东西,尽管有一个匹配项?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:46:11 26 4
gpt4 key购买 nike

我调用这个(Compact Framework - 这个代码在 Windows CE 手持设备上运行)方法:

public static List<string> GetXMLFiles(string fileType, string startingDir)
{
const string EXTENSION = ".XML";
string dirName = startingDir;
var fileNames = new List<String>();
try
{
foreach (string f in Directory.GetFiles(dirName))
{
string ext = Path.GetExtension(f).ToUpper();
string fileNameOnly = Path.GetFileNameWithoutExtension(f);
if ((ext.Equals(EXTENSION, StringComparison.OrdinalIgnoreCase)) && (fileNameOnly.Contains(fileType)))
{
fileNames.Add(f);
}
}
foreach (string d in Directory.GetDirectories(dirName))
{
GetXMLFiles(fileType, d);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return fileNames;
}

...像这样:

List<String> XMLFiles = CCRUtils.GetXMLFiles(fileType, "\\");
MessageBox.Show(XMLFiles.Count.ToString());

...但它没有返回任何内容(MessageBox 显示“0”),即使存在与 fileType 匹配且具有 .xml 扩展名的文件。

是不是因为我的 GetXMLFiles() 方法有问题?根据一只猫here ,我的方法被搞砸了,我应该更频繁地添加到字符串(文件名)的通用列表中。

如果他是对的,我不明白,因为在我看来,这就是该方法应该如何工作:

(a) The first foreach loop looks at files below the root; if a match is found, it's added to the generic list of string
(b) The second foreach loop makes a recursive call to its method, once for every subdirectory on the device; step "a" occurs again for that directory, adding any matches to the generic list of string.

以这种方式搜索所有目录,并将找到的任何匹配项添加到字符串 (fileNames) 的通用列表中。

在第二个 foreach 循环运行它的过程/处理所有目录后,控制权下降到代码的最后一行,它将文件名返回给调用者。

因此,根据我的猜测,我应该返回匹配项,但我什么也没得到。

如果我错了而 Alan 是对的,我应该在哪里添加对 add 的额外调用/应该如何修改此方法?

更新

这样调用:

List<String> XMLFiles = CCRUtils.GetXMLFiles(fileType, "\\");

...行不通,但这种方式行得通:

List<String> XMLFiles = CCRUtils.GetXMLFiles(fileType, @"\");

最佳答案

在递归中,您正在丢失在子目录中找到的文件。以这种方式捕获返回文件名:

foreach (string d in Directory.GetDirectories(dirName))
{
fileNames.AddRange(GetXMLFiles(fileType, d));
}

发生的事情是这条线 var fileNames = new List<String>();创建一个名为 fileNames 的局部变量.你可能会想因为你的方法是静态的,所以方法里面的变量也是静态的。不是这种情况。所以,每次你打电话GetXMLFiles , 每次调用都会创建此变量的副本。

fileNames对于 GetXMLFiles 的每次调用都是本地的,您需要将它找到的所有文件名返回给调用者,并且调用者需要将这些文件名添加到它的本地集合中。

关于c# - 为什么这个函数没有返回任何东西,尽管有一个匹配项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com