我有以下问题:
我有一个字符串变量,它必须存储一个文件路径。
在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在运行时是否具有某些值(如果条件条件下的代码将不执行-那么将没有任何值)值)。

因此,编译器会产生此错误。

08-29 00:23