我有以下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)。
欢迎任何提示。如果已经询问并回答了这个问题,请在评论中发布一个链接,我将关闭此问题。
答案 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)