如何在F#中迭代字符串?

时间:2012-02-27 16:26:17

标签: string f#

我有以下F#代码:

//Array iter version
let toSecureString (s:string) =
    let sString = new SecureString()
    s |> Array.iter (fun cl -> sString.AppendChar cl)
    sString

我正在尝试将.Net字符串转换为.Net SecureString。当我尝试编译时,我收到类型不匹配错误:

stdin(60,10): error FS0001: Type mismatch. Expecting a
    string -> 'a
but given a
    'b [] -> unit
The type 'string' does not match the type ''a []'

如果我没有指定s的类型,这是我看到的类型签名:

val toSecureString : char [] -> SecureString

但是因为我不想每次都为参数手动创建一个字符数组,所以似乎我错过了一些东西。如何使用传入的字符串参数使这段代码工作?

如果它有所作为我正在测试F#2.0(Build 4.0.40219.1)。

欢迎任何提示。如果已经询问并回答了这个问题,请在评论中发布一个链接,我将关闭此问题。

3 个答案:

答案 0 :(得分:15)

使用Seq.iter,而非Array.iter,因为字符串为char seq但不是char[]

答案 1 :(得分:5)

要将字符串操作为char seq,可以使用String module。这有效:

let toSecureString s =
    let sString = new SecureString()
    String.iter sString.AppendChar s
    sString

答案 2 :(得分:3)

你也可以这样做:

SecureString(&&s.ToCharArray().[0], s.Length)