Как перебрать строку в F #? - PullRequest
4 голосов
/ 27 февраля 2012

У меня есть следующий код 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 (сборка 4.0.40219.1).

Любые советы приветствуются.Если об этом уже спрашивали и отвечали, оставьте ссылку в комментариях, и я закрою этот вопрос.

Ответы [ 3 ]

15 голосов
/ 27 февраля 2012

Используйте Seq.iter, а не Array.iter, потому что строки char seq с, но не char[] с.

5 голосов
/ 27 февраля 2012

Чтобы манипулировать строкой как char seq, можно использовать Модуль строки .Это работает:

let toSecureString s =
    let sString = new SecureString()
    String.iter sString.AppendChar s
    sString
3 голосов
/ 27 февраля 2012

Вы также можете сделать это:

SecureString(&&s.ToCharArray().[0], s.Length) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...