You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

F#是否有等效于C# nameof(..)的语法?代码移植咨询

把C#的const和nameof移植到F#的方法

嘿,这事儿简单!F#里有对应的语法能实现和你那段C#代码完全一致的效果,我给你拆解清楚:

首先,C#里的private const在F#里对应的是**private [<Literal>]**——[<Literal>]属性会告诉编译器这个值是编译时就能确定的常量,和C#的const行为完全对齐。而nameof关键字在F#里是直接可用的,用法和C#几乎没差别。

情况1:常量定义在类外部(或模块中)

如果你的C#代码是在类外部定义这些私有常量(虽然private通常用于类内部,但先覆盖这种场景),F#里可以把它们放在模块里:

module MyModule =
    private [<Literal>] let TypeName = nameof MyClass
    private [<Literal>] let MemberName = nameof MyClass.MyMember

// 对应的MyClass定义示例
type MyClass() =
    member _.MyMember = () // 示例成员,匹配你C#代码里的MyMember

情况2:常量定义在类内部(更常见的场景)

如果你的C#代码是把这些const放在MyClass内部,那F#里可以写成静态成员的形式:

type MyClass() =
    // 定义私有静态常量,对应C#的private const
    static member private [<Literal>] TypeName = nameof MyClass
    static member private [<Literal>] MemberName = nameof MyClass.MyMember

    // 你的类成员
    member _.MyMember = ()

不管用哪种写法,TypeName的值都会是"MyClass",MemberName的值是"MyMember",和你原来的C#代码效果完全一致。

额外提一句:F#里的[<Literal>]不仅支持字符串,还支持数字、布尔值等编译时常量类型,范围和C#的const差不多,用起来很顺手。

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:23:32