gpt4 book ai didi

.net - F#-在dotnet 5中使用Concurrent.ConcurrentDictionary.TryRemove

转载 作者:行者123 更新时间:2023-12-03 13:49:31 24 4
gpt4 key购买 nike

我正在将我的F#代码从dotnet3.1迁移到5,并在以下代码中苦苦挣扎:

        let tryRemove key (dict: Concurrent.ConcurrentDictionary<'a, 'b>) =
match dict.TryRemove(key) with
| (true, v) -> Some v
| (false, _) -> None
在3.1 TryRemove返回的元组中,在版本5中,它仅返回 bool 值。为了从字典中获取值,我需要将引用作为 TryRemove的第二个参数传递。
避免返回空v的正确方法是什么?
我试过下面的代码:
    let tryRemove key (dict: Concurrent.ConcurrentDictionary<'a, 'b>): 'b option =
let mutable v: 'b = null
match dict.TryRemove(key, &v) with
| true -> Some v
| _ -> None
但是现在使用它的函数认为 tryRemove的Option中可能有null

error FS0001: The type '(Body -> unit)' does not have 'null' as a proper value


其中 b' is (Body -> unit)

最佳答案

问题是.NET 5增加了过载。在只有TryRemove (key : 'a, byref<'b> value) : bool之前,现在选择了新的重载TryRemove(item: KeyValuePair<'a, 'b>) : bool。参见netcore 3.1NET 5
另一种解决方案是添加类型注释,例如

let tryRemove (key: 'a) (dict: Concurrent.ConcurrentDictionary<'a, 'b>) =
match dict.TryRemove(key) with
| (true, v) -> Some v
| (false, _) -> None

关于.net - F#-在dotnet 5中使用Concurrent.ConcurrentDictionary.TryRemove,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64911290/

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