Tôi thường sử dụng đệ quy 'khách' này trong F #Viết F # recursive khách truy cập thư mục trong C# - seq vs IEnumerable
let rec visitor dir filter=
seq { yield! Directory.GetFiles(dir, filter)
for subdir in Directory.GetDirectories(dir) do yield! visitor subdir filter}
Gần đây tôi đã bắt đầu làm việc về việc thực hiện một số F # chức năng trong C#, và tôi cố gắng để tái sản xuất này như IEnumerable, nhưng tôi đang gặp khó khăn nhận được bất kỳ xa hơn thế:
static IEnumerable<string> Visitor(string root, string filter)
{
foreach (var file in Directory.GetFiles(root, filter))
yield return file;
foreach (var subdir in Directory.GetDirectories(root))
foreach (var file in Visitor(subdir, filter))
yield return file;
}
những gì tôi không hiểu là tại sao tôi phải làm một foreach đôi trong phiên bản C# cho đệ quy, nhưng không phải trong F # ... Liệu seq {} ngầm có làm một 'concat' không?
Vì vậy, tôi có thể làm một .SelectMany để tái tạo điều này trong C#? – Benjol
'Lợi nhuận của sản phẩm' của C# chỉ có thể trả về một mục tại một thời điểm, vì vậy bạn bị mắc kẹt với những lời rao giảng của mình, tôi sợ. – Sunlight