У меня есть следующая проблема: У меня есть строковая переменная, которая должна хранить путь к файлу. В цикле foreach я просматриваю все файлы в определенном каталоге и im ищет самый старый, который сохраняется в этой строковой переменной. Когда цикл закончен, я пытаюсь удалить этот файл, но я получаю сообщение об ошибке: Использование неназначенной локальной переменной.C# переменная доступа 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);
}
это говорит о том, что строка FileDelete в File.Delete (FileDelete) не имеет значения, но удовольствие тонкий, когда я даю ему значение в начале, просто например:
string fileDelete = "blabla";
он отлично работает. Это просто отрезала метода в случае, если вы задаетесь
Когда вы делаете 'строку FileDelete = "BlaBla";', переменная больше не Unassigned.Является ли 'countFiles' больше, чем' 5'? Имеет ли хотя бы один файл время создания до 'DateTime.Now'? Ваш код не гарантирует, что 'fileDelete' назначен, поэтому в какой-то момент он будет ошибочным. –
Как говорили другие, компилятор может работать только с переменной, если он явно инициализирован. Так что просто используйте 'string fileDelete =" ";' – Fabjan
Спасибо всем за тэнов. Теперь я понимаю проблему. Я просто забыл, что компилятор не может знать, что условие 2 всегда выполняется, когда условие 1 (в моей программе), и компилятор видел случай, когда File.Delete будет выполнен без значения, хотя это не может произойти в мой код. – sebastian