F# 在函数结果中使用关键字时引发System.ObjectDisposedException
例如,hashAlgorithm返回SHA1。 当通过TestOhash执行时,上升System.ObjectDisposedExceptionF# 在函数结果中使用关键字时引发System.ObjectDisposedException,f#,F#,例如,hashAlgorithm返回SHA1。 当通过TestOhash执行时,上升System.ObjectDisposedException let hashAlgorithm : HashAlgorithm = ConfigurationManager.AppSettings.Item("HashAlgorithm") |> CryptoConfig.CreateFromName :?> HashAlgorithm let bytesToHash (b
let hashAlgorithm : HashAlgorithm =
ConfigurationManager.AppSettings.Item("HashAlgorithm")
|> CryptoConfig.CreateFromName :?> HashAlgorithm
let bytesToHash (bytes : byte[]) =
bytes |>
use hash = hashAlgorithm
hash.ComputeHash
如果我换成
use hash = SHA1.Create()
那么一切都很好
如何通过TestOhash更改函数以使用使用关键字?问题可能在于
使用
块的范围。试一试
let bytesToHash (bytes:byte[]) =
use hash = hashAlgorithm
bytes |> hash.ComputeHash
这将在调用ComputeHash
后处理hash
值并返回值。在代码中,hash
是在创建一个函数值包装ComputeHash
之后,但在实际使用字节数组调用它之前处理的
另一个问题是,您只创建一次哈希算法,但可能会多次处理它,因此我预计除了第一次调用bytestToHash
之外,所有调用都会失败。您可以这样解决此问题:
let hashAlgorithm() : HashAlgorithm = ...
let bytesToHash (bytes:byte[]) =
use hash = hashAlgorithm()
bytes |> hash.ComputeHash