3

我的一位同事正在将下面的 C# 转换为 F#:

string GetLatestTestResultXmlPath() =>
    new DirectoryInfo(Path.Combine(projFolder, "TestResults"))
        .GetDirectories()
        .OrderByDescending(d => d.LastWriteTime)
        .First()
        .GetDirectories("Out")
        .First()
        .GetFiles("*.log")
        .First()
        .FullName

他得到的最自然的结果是:

let latestTestResultFilePath =
    (new DirectoryInfo(Path.Combine(projFolder, "TestResults")))
        .GetDirectories()
        .OrderByDescending(fun d -> d.LastWriteTime)
        .First()
        .GetDirectories("Out")
        .First()
        .GetFiles("*.log")
        .First()
        .FullName

虽然这完全没问题,但他想知道他是否可以使用中缀运算符而不是后续的管道转发|>运算符来获得一些东西。沿着这些思路:

let latestTestResultFilePath =
    let directoryInfo = new DirectoryInfo(Path.Combine(projFolder, "TestResults"))
    directoryInfo 
    |> (// magic operator here).GetDirectories()
    |> (// magic operator here).OrderByDescending(fun d -> d.LastWriteTime)
    |> (// magic operator here).First()
    |> (// magic operator here).GetDirectories("Out")
    |> (// magic operator here).First()
    |> (// magic operator here).GetFiles("*.log")
    |> (// magic operator here).First()
    |> (// magic operator here).FullName

我也很好奇,我怀疑中缀运算符可能会这样做,但不确定哪个真正适合该角色。

这纯粹是出于好奇。

4

1 回答 1

0

这是不可能的,因为您使用的是静态扩展的 LINQ。

于 2019-06-21T13:57:47.180 回答