c#foreach循环访问变量
c# foreach loop access variable
我遇到以下问题:
我有一个字符串变量,它必须存储一个文件路径。
在 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";
它工作得很好。
如果您想知道,这只是该方法的一个片段
想象一下这个场景:
countFiles > 5
为真
infoFile
对于 someFile
大于 min
传递给 File.Delete
时 fileDelete
会有什么值?
答案:在这种情况下 fileDelete
将未初始化,因此会出现错误消息。
它完全符合预期。
在 C# 中,局部变量不会在声明时自动初始化。
您在声明 fileDelete
时并没有为它赋值,并且仅在循环中的某些条件下赋值。
但是您试图在循环中在此条件之外使用它的值,因此编译器无法推断 - fileDelete
是否在运行时具有某些值(如果条件下的代码不会被执行 -那么 fileDelete
将没有任何价值)。
因此编译器会产生这个错误。
在 C# 中,您必须初始化变量,否则您可能会将垃圾值传递给 File.Delete。
我推荐使用
string fileDelete = null; // or ""
稍后检查。
if (!string.IsNullOrEmpty(fileDelete))
{
File.Delete(fileDelete);
}
您必须初始化您的变量。
见 Why compile error "Use of unassigned local variable"?
使用这个
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);
}
}
}
我遇到以下问题: 我有一个字符串变量,它必须存储一个文件路径。 在 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";
它工作得很好。 如果您想知道,这只是该方法的一个片段
想象一下这个场景:
countFiles > 5
为真infoFile
对于someFile
大于min
传递给 File.Delete
时 fileDelete
会有什么值?
答案:在这种情况下 fileDelete
将未初始化,因此会出现错误消息。
它完全符合预期。
在 C# 中,局部变量不会在声明时自动初始化。
您在声明 fileDelete
时并没有为它赋值,并且仅在循环中的某些条件下赋值。
但是您试图在循环中在此条件之外使用它的值,因此编译器无法推断 - fileDelete
是否在运行时具有某些值(如果条件下的代码不会被执行 -那么 fileDelete
将没有任何价值)。
因此编译器会产生这个错误。
在 C# 中,您必须初始化变量,否则您可能会将垃圾值传递给 File.Delete。
我推荐使用
string fileDelete = null; // or ""
稍后检查。
if (!string.IsNullOrEmpty(fileDelete))
{
File.Delete(fileDelete);
}
您必须初始化您的变量。 见 Why compile error "Use of unassigned local variable"?
使用这个
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);
}
}
}