2009-07-10 6 views
1

Je suis un newb total à LINQ. Voici le code que j'ai jusqu'à présent:.NET/C# - Méthode correcte à utiliser ici - 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))); 
    } 

} 

Quel est le nom de la méthode correcte pour remplacer SomeMethod avec cela pour le faire fonctionner? Je voudrais simplement une façon plus concise d'écrire une boucle ici.

Répondre

13

ressemble à quelque chose comme la fonction ForEach dans la liste. Vous pouvez faire ce qui suit ...

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

ou vous pouvez faire quelque chose comme cela comme une approche plus directe

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

ou ...

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(); 

Ou - sans utiliser linq du tout, que diriez-vous de celui-ci? ...

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

Vous pouvez utiliser la méthode ForEach statique:

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

Cependant, vous pouvez facilement remplacer la fonction entière avec cette seule ligne:

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

Il y a déjà une méthode DirectoryInfo pour ce faire:

DirectoryInfo di = new DirectoryInfo(path); 
FileInfo[] fis = di.GetFileSystemInfos(); 

Si vous avez besoin d'une liste, utilisez Enumerable.ToList.