gpt4 book ai didi

.net - F# 中泛型类型的运行时强制

转载 作者:行者123 更新时间:2023-12-04 16:26:19 26 4
gpt4 key购买 nike

我在 F# 中有一个带有显式泛型参数的基类。我正在尝试检查我正在使用的给定类型是否实现了特定的接口(interface)。我认为“如果 ob :? ISysAware then”会做,但提示总是一样的:

let (|SysAware|_|) t = 
match t with
| :? ISysAware as p -> Some(p)
| _ -> None

错误 FS0008:从类型 'a 到 ISysAware 的此运行时强制或类型测试涉及基于此程序点之前的信息的不确定类型。某些类型不允许运行时类型测试。需要进一步的类型注释。

显然,我不想在这里使用反射。 IsAssignableFrom 可以解决问题,但成本很高。

想法?

最佳答案

一些 F# 类型是值类型;添加 box确保仅对引用类型执行类型测试:

let (|SysAware|_|) t = 
match box t with
| :? ISysAware as p -> Some(p)
| _ -> None

关于.net - F# 中泛型类型的运行时强制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9026965/

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