Как получить FileInfo через цикл foreach?
Пытаюсь конвертировать немного VB в C#... (тоже изучаю C#). У меня есть некоторый код, который просматривает файлы в каталоге и получает информацию о них. У меня это изначально на VB, но я пытаюсь изучать C#, и онлайн-конвертеры не дают мне код, который пройдет.net 2.0.
Вот ошибка:Type and identifier are both required in a foreach statement
Вот код, который у меня есть:
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
FileInfo[] files = null;
files = dirInfo.GetFiles();
FileInfo f = default(FileInfo);
foreach (f in files) { ...
}
Я пытался положить foreach(FileInfo f...
но это дает мне другую ошибку: A local variable named 'f' cannot be declared in this scope because it would give a different meaning to 'f', which is already used in a 'parent or current' scope to denote something else
Как мне это исправить?
4 ответа
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
FileInfo[] files = null;
files = dirInfo.GetFiles();
// I removed the declaration of f here to prevent the name collision.
foreach (FileInfo f in files)
{ ...
}
Вот более простая версия кода:
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
foreach (FileInfo f in dirInfo.GetFiles())
{
}
Вы должны предоставить тип переменной, используемой внутри цикла. В вашем случае это будет FileInfo
, Но с C# 3.0 или позже вы можете просто написать var
и компилятор выведет тип для вас:
foreach (FileInfo f in files)
{
// ...
}
Подробнее о выражении foreach читайте здесь.
Полное решение (вам не нужно инициализировать переменную итерации и массив файлов):
DirectoryInfo dir = new DirectoryInfo(currentDir);
foreach (FileInfo file in dir.GetFiles())
{
// use file
}
Вот где, похоже, вы ошибаетесь:
FileInfo f = default(FileInfo);
foreach (f in files) { ...
}
Вы определяете f вне цикла, а затем пытаетесь определить его в цикле.
Если вам нужно по умолчанию f, попробуйте это:
FileInfo f = default(FileInfo);
foreach (FileInfo file in files)
{
relevant code here
}
В противном случае удалите оператор, объявляющий переменную "f"
Это должно работать:
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
FileInfo[] files = null;
files = dirInfo.GetFiles();
foreach (FileInfo f in files)
{
}
Редактировать:
Это было бы чище, на мой взгляд:
foreach (FileInfo f in new DirectoryInfo(currentDir).GetFiles())
{
}