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语言。我还有一个问题:如何将字节数组转换为其等效的数字?提前感谢您的帮助。:-)@我的天,没问题。你的问题很清楚,很简洁,一点也不傻@我的朋友,我更新了你评论中问题的答案。