2016-09-25 9 views
0

У меня странное поведение и не знаю, куда идти отсюда. Я пытаюсь прочитать имя файла из каталога и добавить его в общий список типа <string>.Скопировать имя файла из директора в общий список

string path = @"C:\mydir\"; 

foreach (string s in Directory.GetFiles(path, "*.bak").Select(System.IO.Path.GetFileName)) 
{ 
    GenericList1.Add(s); 

} 

Я получаю ошибку:

Object reference not set to an instance of an object.

Когда я отладки, я вижу, что переменная s отображает имя файла в качестве значения. Infact я могу увидеть значение, когда я использую:

foreach (string s in Directory.GetFiles(path, "*.bak").Select(System.IO.Path.GetFileName)) 
{ 
    System.Windows.Forms.MessageBox.Show(s);   
} 

Каждый имеет какие-либо понять, где я мог бы идти здесь не так?

ответ

0
foreach (string s in Directory.GetFiles(path, "*.bak").Select(p => Path.GetFileName(p))) 
     { 
      GenericList1.Add(s); 

     } 

Для этого метода Select требуется выполнить функцию для каждого объекта. Самый простой способ сделать это - использовать простую лямбду.

В основном вы создаете анонимный метод или функцию при использовании лямбда. Метод Select должен знать, какую функцию или действие вы хотите использовать для каждого элемента коллекции. В этом случае вы хотите получить имя файла для каждого элемента коллекции, возвращаемого методом GetFiles. Если вы хотите больше объяснений, дайте мне знать.

+0

HI Adrian, я использовал lambba и все еще получаю то же значение null, которое передается в список, даже если сама переменная содержит фактическое имя файла. Я пытаюсь понять, что было предложено по http://stackoverflow.com/questions/3694676/how-do-retrieve-all-filenames-in-a-directory –

+0

На самом деле, я действительно работал, вставляя данные в массив и затем добавив этот массив в общий список. Поэтому у меня есть решение. Но любопытно об исходном вопросе, хотя –

+0

Можете ли вы поместить свой код, который работает на pastebucket, и отправить мне ссылку здесь? Мне любопытно, почему это не работает для вас тоже. Не должно быть никаких проблем. – Adrian