2009-07-10 9 views
1

Ich bin eine völlig neue LINQ. Hier ist der Code, die ich bisher habe:.NET/C# - Richtige Methode, hier zu verwenden - LINQ

public class Folder 
{ 
    public Folder(string path) 
    { 
     string[] files = Directory.GetFiles(path); 
     IList<FileInfo> fis = new List<FileInfo>(); 
     files.SomeMethod(x => fis.Add(new FileInfo(x))); 
    } 

} 

Was Name ist die richtige Methode Somemethod mit diesem zu ersetzen, um es an die Arbeit? Ich möchte im Grunde nur eine prägnantere Art, hier eine Schleife zu schreiben.

Antwort

13

klingt wie Sie suchen etwas wie die ForEach-Funktion in der Liste. Sie könnten die folgende tun ...

files.ToList().ForEach(x => fis.Add(new FileInfo(x)));  

oder Sie so etwas wie dies als ein direkterer Ansatz

IList<FileInfo> fis = (from f in Directory.GetFiles(path) 
         select new FileInfo(f)).ToList(); 

oder ...

IList<FileInfo> fis = Directory.GetFiles(path).Select(s => new FileInfo(s)).ToList(); 
// or 
IList<FileInfo> fis = Directory.GetFiles(path) 
         .Select(s => new FileInfo(s)) 
         .ToList(); 

Oder tun könnte - ohne Verwendung von linq überhaupt, wie wäre es mit diesem ...?

IList<FileInfo> fis = new List<FileInfo>(new DirectoryInfo(path).GetFiles()); 
4

Sie könnte die statische ForEach-Methode verwenden:

Array.ForEach(x => fis.Add(new FileInfo(x))); 

Sie können jedoch leicht die gesamte Funktion mit dieser Zeile:

IList<FileInfo> fis = Directory.GetFiles(path). 
    Select(f => new FileInfo(f)).ToList(); 
2
var fis = 
    new List<FileInfo>(
     from f in Directory.GetFiles(path) select new FileInfo(f)); 
0
string[] files = Directory.GetFiles(path); 
IList<FileInfo> fis = new List<FileInfo>(); 
Array.ForEach(files, x => fis.Add(new FileInfo(x))); 
1

Es gibt bereits eine Directory Methode Um dies zu tun:

Wenn Sie eine Liste benötigen, verwenden Sie Enumerable.ToList.

Verwandte Themen