为什么F#中仅可使用String.Join,无法使用string.Join?
问题原因核心结论
string确实是.NET System.String 类的类型别名,两种语言的差异本质是C#和F#对类型别名的适用场景规则不同:
- C#中
string是关键字级别名,全场景等价于System.String
C#编译器会在所有上下文中将string直接替换为System.String,不管是用于声明变量类型的类型上下文,还是访问静态成员的表达式上下文都支持,所以string.Join和String.Join(需提前引入System命名空间)的编译结果完全一致。 - F#中
string是类型缩写,仅支持在类型上下文使用
F#的类型缩写设计上仅允许用于类型声明场景(比如let name:string = "test"),不支持在访问静态成员的表达式上下文中使用,所有静态成员访问必须使用原始类型名System.String(简写String也需要提前引入System命名空间),所以string.Join会触发编译错误。
这个规则是F#的通用规则,不止针对
string:比如int是System.Int32的F#别名,你也只能写Int32.MaxValue,无法使用int.MaxValue访问静态属性。
内容的提问来源于stack exchange,提问作者Dragno
相关产品推荐
相关产品推荐

