gpt4 book ai didi

F# 使用 DataReader

转载 作者:行者123 更新时间:2023-12-03 23:11:26 25 4
gpt4 key购买 nike

let reader = selectCommand.ExecuteReader()

let getBytesData (x : IDataReader) =
let len = reader.GetBytes(1, int64 0, null, 0, 0);
// Create a buffer to hold the bytes, and then
// read the bytes from the DataTableReader.
let buffer : byte array = Array.zeroCreate (int32 len)
x.GetBytes(1, int64 0, buffer, 0, int32 len) |> ignore
buffer

let retVal =
List [ while reader.Read() do
yield (reader.GetString(0), getBytesData reader,
reader.GetDateTime(2)) ]

我有上面的代码从datareader读取字节[]。

getBytesData 函数接受读取器并从读取器返回字节 []。
  • 一切正常,但 getBytesData 函数以非常非功能性的方式工作。
  • 我创建零填充字节数组只是为了创建数组,有什么方法可以创建动态扩展或固定长度数组

  • 有什么办法可以在 F# 中进行优化吗?

    抱歉问了一个问题,但我已经在 F# 上开始了一个新项目来榨取所有汁液,所以试图让每一行都以最佳方式

    最佳答案

    GetBytes IDataReader的方法并没有真正提供任何以更实用的方式编写代码的选项(它需要一个它想要修改的数组,所以我们只需要给它一些数组......)。

    所以你的代码版本非常好 - 即使它不是完全正常的,你至少可以将命令式部分本地化在该单个函数中,并保持程序的其余部分正常运行(这是一个很好的结果)!

    我会在您的代码中做的唯一更改是我将移动 reader到序列理解(使其更加本地化),我将使用 use关键字以确保它被正确处理(此外,您不需要序列表达式中的 List 标识符):

    let retVal =  
    [ use reader = selectCommand.ExecuteReader()
    while reader.Read() do
    yield (reader.GetString(0), getBytesData reader, reader.GetDateTime(2)) ]

    关于F# 使用 DataReader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2983087/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com