2010-06-05 13 views
32

sto scrivendo il mio primo F # bibliotecaF # string.Format

Sto cercando di usare string.Format e si lamenta che non esiste tale funzione.

Non è disponibile o sto facendo qualcosa di sbagliato?

risposta

81

Se si vuole evitare di usare il nome completo, è possibile utilizzare open in F #:

open System 
let s = String.Format("Hello {0}", "world") 

Questo dovrebbe funzionare sia in F # interattivo (inserire prima la clausola open e nelle normali applicazioni compilate. La cosa fondamentale è che è necessario scrivere String con maiuscolo S. Questo perché string in C# non è un nome di tipo normale: si tratta di una parola chiave che si riferisce al tipo System.String.

In alternativa, è anche possibile dare un'occhiata alla funzione sprintf. Si tratta di un F # SPECIFICI alternativa al String.Format che ha alcuni vantaggi bei - per esempio è di tipo controllato:

let s = sprintf "Hello %s! Number is %d" "world" 42 

Il compilatore controllerà che i parametri (stringa e int) corrispondano alle identificatori di formato (%s per archi e %d per i numeri interi). La funzione funziona anche meglio in scenari in cui si desidera utilizzare l'applicazione funzione parziale:

let nums = [ 1 .. 10 ] 
let formatted = nums |> List.map (sprintf "number %d") 

Questo produrrà una lista di stringhe contenenti "numero 1", "numero 2", ecc ... Se si voleva fare questo usando String.Format, dovresti scrivere esplicitamente una funzione lambda.

+2

Vorrei poter invitare questo due volte per suggerire 'sprintf', che è una soluzione migliore per la maggior parte del tempo. –

+2

'sprint' è sicuramente più idiomatico, ma potrebbe essere più lento quando viene chiamato frequentemente in un ciclo ... –

+0

Wow-Sono sorpreso solo [come lento' sprintf' è in F #] (http://stackoverflow.com/domande/16742189/prestazioni-di-sprintf-vs-string-format). Buon punto –

3

il nome completo è:

System.String.Format 
+0

Grazie, aggiungendo utilizzando il sistema fa il trucco – mamu

+0

intendo sistema aperto, C# riempito ovunque :) – mamu