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
相关产品推荐
相关产品推荐

