2016-09-25 54 views
0

我有一个奇怪的行为,不知道从哪里去。我试图从目录中读取文件名,并将其添加到类型为<string>的通用列表中。从directoriy复制文件名到通用列表

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显示文件名作为值。逸岸,我可以看到的价值,当我使用:

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方法需要一个函数来执行每个对象。最简单的方法是使用简单的lambda。

你基本上是在使用lambda时创建一个匿名方法或函数。 Select方法需要知道您想要对集合中的每个项目执行什么功能或操作。在这种情况下,您想要获取由GetFiles方法返回的集合中每个项目的文件名。如果你想要更多的解释让我知道。

+0

HI Adrian,我使用lambba并仍然得到相同的空值传入列表,即使变量本身包含实际的文件名。我尝试了什么建议下http://stackoverflow.com/questions/3694676/how-do-i-retrieve-all-filenames-in-a-目录 –

+0

其实,我通过将数据插入到数组中并解决然后将该数组添加到通用列表中。所以我有解决方案。但对原始问题感到好奇 –

+0

你可以把你的代码放在一个pastebucket上,然后把链接发给我吗?我很好奇,为什么它也不适合你。不应该有任何问题 – Adrian

相关问题