F# 在F中调用File.ReadAllBytes方法#

F# 在F中调用File.ReadAllBytes方法#,f#,F#,以下是我的代码示例: let getAllBooks bookDirectory = seq {yield! Directory.GetFiles(bookDirectory)} |> Seq.map (fun eachFile -> eachFile.ReadAllBytes) 它不起作用。怎么了?我应该写什么呢?就像你在标题中说的,函数名为File.ReadAllBytes;) 它是System.IO.File类的静态方法,因此必须在File类型上调用,而不是在

以下是我的代码示例:

let getAllBooks bookDirectory =
    seq {yield! Directory.GetFiles(bookDirectory)}
    |> Seq.map (fun eachFile -> eachFile.ReadAllBytes)

它不起作用。怎么了?我应该写什么呢?

就像你在标题中说的,函数名为
File.ReadAllBytes
;)

它是
System.IO.File
类的静态方法,因此必须在
File
类型上调用,而不是在某些实例上调用:

open System.IO

let getAllBooks bookDirectory =
    seq {yield! Directory.GetFiles (bookDirectory) }
    |> Seq.map (fun eachFile -> File.ReadAllBytes eachFile)
顺便说一句,这段代码可以改进,因为
GetFiles
的结果是一个数组,它也是一个
seq

open System.IO

let getAllBooks bookDirectory =
    Directory.GetFiles bookDirectory
    |> Seq.map (fun eachFile -> File.ReadAllBytes eachFile)
此外,您只需将
ReadAllBytes
函数直接传递到映射:

open System.IO

let getAllBooks bookDirectory =
    Directory.GetFiles bookDirectory
    |> Seq.map File.ReadAllBytes
最后,如果愿意,还可以去掉函数参数:

open System.IO

let getAllBooks =
    Directory.GetFiles
    >> Seq.map File.ReadAllBytes

最新评论:

我还有一个问题:如何将字节数组转换为其等效的数字

您可以使用
System.BitConverter
类中的静态方法,例如
System.BitConverter.ToInt32

open System

let array = [| 0x00uy; 0x10uy; 0x00uy; 0x00uy |]

BitConverter.ToInt32 (array, 0)
|> printfn "Array as Int32: %d"
// Prints: Array as Int32: 4096
不要忽略其中的
ToString
方法,它可以将字节数组转换为十六进制字符串:

BitConverter.ToString array
|> printfn "%s"
// Prints: 00-10-00-00

您可以找到所有可用的转换方法。

感谢您的解释!如果我的问题被认为是愚蠢的,我很抱歉——我是编程新手,这是我第一次使用.NET语言。我还有一个问题:如何将字节数组转换为其等效的数字?提前感谢您的帮助。:-)@我的天,没问题。你的问题很清楚,很简洁,一点也不傻@我的朋友,我更新了你评论中问题的答案。