F# 如何重写这个处理流和字节缓冲区的C#代码

F# 如何重写这个处理流和字节缓冲区的C#代码,f#,c#-to-f#,F#,C# To F#,我有一个C#代码: const int bufferLen=4096; byte[]buffer=新字节[bufferLen]; 整数计数=0; 而((count=stream.Read(buffer,0,bufferLen))>0) { 输出流写入(缓冲区,0,计数); } 我需要用F#重写它。我可以这样做: let bufferLen : int = 4096 let buffer : byte array = Array.zeroCreate bufferLen let count :

我有一个C#代码:

const int bufferLen=4096;
byte[]buffer=新字节[bufferLen];
整数计数=0;
而((count=stream.Read(buffer,0,bufferLen))>0)
{
输出流写入(缓冲区,0,计数);
}
我需要用F#重写它。我可以这样做:

let bufferLen : int = 4096
let buffer : byte array = Array.zeroCreate bufferLen
let count : int = 0

let mutable count = stream.Read(buffer, 0, bufferLen)
if count > 0 then
   outstream.Write(buffer, 0, count)

while (count > 0) do
   count <- stream.Read(buffer, 0, bufferLen)
   outstream.Write(buffer, 0, count)
let copyInto (outstream : System.IO.Stream) (stream : System.IO.Stream) =
    let bufferLen : int = 4096
    let buffer : byte array = Array.zeroCreate bufferLen

    let rec copy () =
        match stream.Read(buffer, 0, bufferLen) with
        | count when count > 0 ->
            outstream.Write(buffer, 0, count)
            copy ()
        | _ -> ()

    copy () 
let bufferLen:int=4096
let buffer:byte array=array.zeroCreate bufferLen
让计数:int=0
让可变计数=stream.Read(buffer,0,bufferLen)
如果计数>0,则
输出流写入(缓冲区,0,计数)
而(计数>0)则执行

除了Patryk的评论之外,计数:

这是一个非常紧迫的问题,所以它不会变得更漂亮

我唯一想改变的是重复的读/写-可能是这样的:

let bufferLen : int = 4096
let buffer : byte array = Array.zeroCreate bufferLen
let count : int = 0

let mutable count = stream.Read(buffer, 0, bufferLen)
if count > 0 then
   outstream.Write(buffer, 0, count)

while (count > 0) do
   count <- stream.Read(buffer, 0, bufferLen)
   outstream.Write(buffer, 0, count)
let copyInto (outstream : System.IO.Stream) (stream : System.IO.Stream) =
    let bufferLen : int = 4096
    let buffer : byte array = Array.zeroCreate bufferLen

    let rec copy () =
        match stream.Read(buffer, 0, bufferLen) with
        | count when count > 0 ->
            outstream.Write(buffer, 0, count)
            copy ()
        | _ -> ()

    copy () 

除了帕特里克的评论外:

这是一个非常紧迫的问题,所以它不会变得更漂亮

我唯一想改变的是重复的读/写-可能是这样的:

let bufferLen : int = 4096
let buffer : byte array = Array.zeroCreate bufferLen
let count : int = 0

let mutable count = stream.Read(buffer, 0, bufferLen)
if count > 0 then
   outstream.Write(buffer, 0, count)

while (count > 0) do
   count <- stream.Read(buffer, 0, bufferLen)
   outstream.Write(buffer, 0, count)
let copyInto (outstream : System.IO.Stream) (stream : System.IO.Stream) =
    let bufferLen : int = 4096
    let buffer : byte array = Array.zeroCreate bufferLen

    let rec copy () =
        match stream.Read(buffer, 0, bufferLen) with
        | count when count > 0 ->
            outstream.Write(buffer, 0, count)
            copy ()
        | _ -> ()

    copy () 

在函数语言中,循环和可变变量通常被递归(和模式匹配)所取代。我知道,但我有一个共享的缓冲区和流。将它们作为参数传递给函数安全吗?@demas我知道这是在回避当前的问题,但为什么不使用or呢?:)@PatrykĆwiek这不是旁敲侧击——这是显而易见的事情;)在函数语言中,循环和可变变量通常被递归(和模式匹配)所取代。我知道,但我有一个共享的缓冲区和流。将它们作为参数传递给函数安全吗?@demas我知道这是在回避当前的问题,但为什么不使用or呢?:)@PatrykĆwiek这不是旁敲侧击——这是显而易见的事情;)