作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我能做到:
type AttrAttribute () =
inherit Attribute ()
type MyDU =
| [<Attr>]A of bool
| [<Attr>]B of int * string
| [<Attr>]C of byte * char * int64
...但是有什么办法可以做到这一点吗?
type MyDU =
| A of [<Attr>]bool
| B of int * [<Attr>]string
| C of [<Attr>]byte * char * [<Attr>]int64
显然,大小写值只是字段(例如 let v = B (13, "oops") in (Microsoft.FSharp.Reflection.FSharpValue.GetUnionFields (v, v.GetType ()) |> fst ).GetFields ()
),所以我希望这是可行的。
最佳答案
这是相当做作的:
type A_ = { [<Attr>] Item1 : int }
type B_ = { [<Attr>] Item1 : int; [<Attr>] Item2 : string }
type MyDU =
| A of A_
| B of B_
和
let v = A({Item1 = 1})
let record = ((FSharpValue.GetUnionFields (v, v.GetType ()) |> fst).GetFields ()) |> Array.head
let attrs = record.PropertyType.GetProperties() |> Array.collect(fun p -> p.GetCustomAttributes(false))
关于reflection - F#:受歧视联合字段的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41626032/
我一直在使用标记的联合类型来处理 typescript 歧视,但我遇到了一些奇怪的事情。如果我打开实际的对象属性,一切都会按预期工作。但是如果我使用解构,typescript 会报错。我认为它与编译时
我正在创建一个动态小部件,它可以是空的也可以是已填充的。它应该默认为空。当populated={true} , 我想要 totalGross和 totalNet需要的值。否则,不应允许使用这 2 个
我是一名优秀的程序员,十分优秀!