我对您的代码所做的唯一更改是将 reader 移至序列理解(以使其更加本地化),并且将使用 use 关键字以确保正确处理它(而且,您在序列表达式中不需要 List 标识符): 让retVal =[使用reader = selectCommand.ExecuteReader()而reader.Read()做产量(reader.GetString(0),getBytesData阅读器,reader.GetDateTime(2))] 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 bufferlet retVal = List [ while reader.Read() do yield (reader.GetString(0), getBytesData reader, reader.GetDateTime(2)) ]I have above code to read bytes[] from datareader.getBytesData function takes reader and returns bytes[] from reader.everything works fine but it getBytesData function is working very non-functional way.i am creates zero filled byte array just to create array, is there any way of creating dynamic expanding or fixed lenght arrayIs there any way i can optimize in F#?Sorry for kind of question, but i have started a new project on F# to squeeze all juice out of it, so trying to get each line most optimal way 解决方案 The GetBytes method of the IDataReader doesn't really provide any options for writing the code in a more functional way (it takes an array that it wants to modify, so we simply must give it some array...).So your version of code is perfectly fine - even though it's not fully functional, you can at least keep the imperative part localized in that single function and keep the rest of your program functional (which is a good result)!The only change I would do in your code is that I would move reader to the sequence comprehension (to make it more localized) and I would use the use keyword to make sure that it gets properly disposed (also, you don't need the List identifier in the sequence expression):let retVal = [ use reader = selectCommand.ExecuteReader() while reader.Read() do yield (reader.GetString(0), getBytesData reader, reader.GetDateTime(2)) ] 这篇关于F#与DataReader一起使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云! 09-03 16:40