字符的F#中的System.String扩展成员

字符的F#中的System.String扩展成员,f#,F#,我已经阅读了System.String的文档和源代码。我可以看到默认索引器是用这个[int index]定义的,并且使用了别名“Chars”。我想通过编写下面的代码来扩展它 type System.String with member self.Chars (boolean:bool) = if boolean then self.[0] else self.[1] printfn "%c" ("abc".[false]) printfn "%c" ("abc".Chars(false

我已经阅读了System.String的文档和源代码。我可以看到默认索引器是用这个[int index]定义的,并且使用了别名“Chars”。我想通过编写下面的代码来扩展它

type System.String with
    member self.Chars (boolean:bool) = if boolean then self.[0] else self.[1]

printfn "%c" ("abc".[false])
printfn "%c" ("abc".Chars(false))
原因是因为我看到了其他文章和代码片段,指出我将拥有这种能力。我现在正在尝试测试它。我还注意到System.String被定义为Sealed

[<Sealed>]
[]

我已经做了很多搜索,查看了像fssnip.net和Tomas p的文章以及Stackoverflow上的这些网站。我遗漏了什么?

这不起作用的原因是因为Chars是属性的别名,而不是方法本身。属性上似乎不可能使用扩展方法


即使它是一个带有参数的get,也必须创建一个泛型版本,这可能需要指向一个方法,我可以从该方法创建受约束的版本@林吉尔把我引向正确的方向。非常感谢。您好。

您遇到了什么问题?扩展方法永远不会优先于已编译属性。您可以尝试将扩展方法重命名为类似
FirstChar
或类似的名称that@MarkSeemann:您好,编译器的错误是错误FS0001:此表达式的类型应为int,但此处的类型为bool(FS0001)@林吉尔:我希望不同的签名能让它与现有的方法共存。我不想重新定义字符(int),我想有一个额外的字符(bool)来解析。是否有任何文章指向限制我的语言或运行时问题?