【发布时间】:2020-11-10 02:37:32
【问题描述】:
我在我的项目文件中使用带有 <LangVersion>preview</LangVersion> 的 F# 4.7。
我有一个这样的类型:
type Record = {
Name : string
Description : string
FieldNotInterestedIn: int
}
我想以类型安全的方式获取某些字段的名称,但不是全部。我知道我可以使用反射获取所有字段名称。
这是我想出的最简洁的代码。能不能再简洁点?
let certainFieldNames =
let r = Unchecked.defaultof<Record>
[
nameof r.Name
nameof r.Description
]
【问题讨论】:
-
我不确定我是否明白这个问题 - 你是在问你是否可以做
[r.Name; r.Description] |> List.map nameof吗?那是行不通的,因为nameof是一个特殊的运算符,而不是一个普通的函数...... -
我先试了一下,想知道为什么
nameof故意不是一流的函数。 -
我也想知道我是否可以在不创建值的实例的情况下做到这一点,就像我使用
Unchecked.defaultof<Record>所做的那样。 -
最好能做类似
nameof Record.Name的事情。 -
@brett,你可以这样做,使用 defaultof 是首选方式,因为它会被删除。此外,即使没有,该函数也永远不会创建引用类型的实例。
标签: reflection properties f# nameof