【发布时间】:2026-01-12 21:25:02
【问题描述】:
我有以下问题: 我有一个字符串变量,它必须存储一个文件路径。 在 foreach 循环中,我遍历某个目录中的所有文件,并寻找最旧的文件,该文件保存在该字符串变量中。 循环完成后,我尝试删除该文件,但出现错误: 使用未分配的局部变量。
代码如下:
DateTime min = DateTime.Now;
string[] fileNames = Directory.GetFiles(somePath);
string fileDelete;
int countFiles = fileNames.Length;
if (countfiles > 5)
{
foreach (string someFile in fileNames)
{
FileInfo infoFile = new FileInfo(someFile);
if (infoFile.CreationTime <= min)
{
min = infoFile.CreationTime;
fileDelete = someFile;
}
}
File.Delete(fileDelete);
}
它表示 File.Delete(fileDelete) 中的字符串 fileDelete 没有值, 但有趣的是,当我在一开始就给它一个值时:
string fileDelete = "blabla";
它工作得很好。 这只是方法的一个片段,以防您想知道
【问题讨论】:
-
当您执行
string fileDelete = "blabla";时,该变量不再未分配。countFiles是否大于5?是否至少有一个文件的创建时间早于DateTime.Now?您的代码不能保证分配了fileDelete,所以它在某些时候会出错。 -
正如其他人所说,编译器只有在显式初始化时才能使用变量。所以只需使用
string fileDelete = ""; -
谢谢大家的遮阳篷。我现在明白了这个问题。我只是忘记了编译器无法知道条件 2 总是满足条件 1 时(在我的程序中),并且编译器看到了一个案例,其中 File.Delete 将在没有值的情况下执行,即使这不会发生在我的代码。
标签: c# .net foreach unassigned-variable