我有以下问题:
我有一个字符串变量,它必须存储一个文件路径。
在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";
它工作得很好。
这只是您想知道的方法的摘要
最佳答案
它完全按预期工作。
在C#中,局部变量不会在声明时自动初始化。
在声明fileDelete
并仅在循环中的某些条件下分配它时,您不会对fileDelete
赋任何值。
但是您正在尝试在此条件之外循环使用其值,因此编译器无法推断-fileDelete
在运行时是否具有某些值(如果条件条件下的代码将不执行-那么将没有任何值)值)。
因此,编译器会产生此错误。