gpt4 book ai didi

反射以了解属性是否为选项类型

转载 作者:行者123 更新时间:2023-12-04 17:35:33 25 4
gpt4 key购买 nike

我使用反射使用数据填充某些对象的字段。由于我的对象是F#类型,因此它具有一些Option字段。如果选择

property.SetValue(object, newValue)

合理地失败,因为它需要
property.SetValue(object, Some(newValue))

因此,我试图找出某个属性是否为 Option类型。我可以这样:
let isOption (p:PropertyInfo) = p.PropertyType.Name.StartsWith("FSharpOption")

但是必须有更好的方法,不是吗?我必须说,对于 IsOption没有方法 FSharpType,我感到很奇怪。

最佳答案

您可以使用如下所示的内容:

let isOption (p:PropertyInfo) = 
p.PropertyType.IsGenericType &&
p.PropertyType.GetGenericTypeDefinition() = typedefof<Option<_>>

基本上, GetGenericTypeDefinition 返回属性的通用类型,而没有任何类型参数。 typedefof 所做的事情非常相似,仅使用编译时类型信息。在这种情况下,它将返回 Option<>,不带任何参数。然后,您可以简单地比较它们以查看它们是否是相同类型。

关于反射以了解属性是否为选项类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20696262/

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