Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在F#中迭代字符串?_String_F# - Fatal编程技术网

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

String 如何在F#中迭代字符串?,string,f#,String,F#,我有以下F#代码: 我正在尝试将.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的类型,这就是我看到的类型签名: va

我有以下F#代码:

我正在尝试将.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)上进行测试


欢迎任何提示。如果这个问题已经被问到并回答了,在评论中发布一个链接,我将结束这个问题

使用
Seq.iter
,而不是
Array.iter
,因为字符串是
char-Seq
s,而不是
char[]
s。要将字符串作为
char-Seq
进行操作,可以使用。这项工作:

let toSecureString s =
    let sString = new SecureString()
    String.iter sString.AppendChar s
    sString
您也可以这样做:

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

谢谢kvb。我知道我遗漏了一些明显的东西。你为什么要使用
SecureString
?如果您已经有一个
字符串
,那么将其复制到
SecureString
不会增加任何安全性,我认为。这可能就是为什么没有
AppendString()
。我使用的是SecureString,因为Windows API需要SecureString。哇,伙计们,三个很好的答案。希望我能选择所有这些作为“接受答案”,我现在有5或6种不同的方法将字符串转换为SecureString。我将做一些评测和一些其他测试,看看是否有什么好的理由选择其中任何一个。博客帖子来了!在返回字符串之前,您不是在处理它吗?谢谢@Daniel——这是第三种方法。我有另一种方法,我没有发布。谢谢@pad,我不知道这个选项。实际上,我更喜欢使用字符串模块而不是Seq模块来避免类型注释:)。对不起@pad——什么类型的注释?如果我使用Seq.iter,我不需要上面代码中的s或cl的类型规范。我的意思是避免明确地说
s
string
,而不是
Seq
。您不必使用lambda,您可以直接传递
sString.AppendChar
。当然,如果您使用
Seq.iter
并删除类型注释,那么该函数将处理任何字符序列,而不仅仅是字符串。
SecureString(&&s.ToCharArray().[0], s.Length)