2013-03-07 37 views
1

我已經從特定文件夾中選擇了一個數組中的文件列表。字符串數組到字符串轉換所需的Linq語法

String[] allfiles = System.IO.Directory.GetFiles(Target, "*.*", System.IO.SearchOption.AllDirectories); 

我需要把所有的這個文件到字符串變量和每一行與LINQ的幫助「\ n」字符追加。我可以在循環的幫助下像下面這樣做,但我需要LINQ語法。

String strFileName = string.Empty; 

for (int i = 0; i < allfiles.Length ; i++) 
    strFileName = strFileName + "\n" + allfiles[1] ; 
+1

我想你是指'allfiles [i]' – 2013-03-07 13:29:13

+0

你上面的代碼無法解決你的問題。 – 2013-03-07 13:30:30

+1

@HamletHakobyan顯然。如果可以的話,他爲什麼要問這裏? – Nolonar 2013-03-07 13:40:01

回答

7

首先,我會用Directory.EnumerateFiles代替,所以你不需要等到所有文件的讀取。然後你可以使用string.Join(Environment.NewLine, allFileNames)

IEnumerable<string> allFileNames = Directory.EnumerateFiles(Target, "*.*", System.IO.SearchOption.AllDirectories); 
string strFileNames = string.Join(Environment.NewLine, allFileNames); 
5

很容易的

String.Join("\n",allFiles) 
-1

你不需要的LINQ做到這一點,你可以使用的string.join()方法來代替。

String strFileName = string.Join("\n", allfiles); 
+0

有[String.Concat'](http://msdn.microsoft.com/en-gb/library/system.string.concat.aspx)沒有重載,它需要一個'string'和一個'IEnumerable ' – Jamiec 2013-03-07 13:32:05

-1

下面應該工作

String.Join(delimiter,stringArray); 
0

你不需要LINQ了點。只需使用簡單的string.Join()方法即可。

string.Join("\n",allfiles); 
4

你不需要LINQ到做到這一點,你可以使用String.Join方法在Jamiec的答案說明。現在

,如果你真的想使用LINQ做到這一點,你可以使用Aggregate

string strFileName = allfiles.Aggregate("", (acc, file) => acc + "\n" + file); 

或者更好,使用StringBuilder

string strFileName = allfiles.Aggregate(
            new StringBuilder(), 
            (acc, file) => acc.AppendLine(file), 
            acc => acc.ToString()); 
+0

+1 for stringbuilder解決方案 – Jamiec 2013-03-07 13:34:28

+1

+1爲實際使用LINQ的第一個答案 – 2013-03-07 13:37:33

2

如果是需要使用LINQ :

var result = allFiles.Aggregate(new StringBuilder(), 
           (sb, s) => sb.AppendLine(s), 
           sb => sb.ToString());