Domanda

Qual è la migliore pratica per specificare currenculture o invariantculture e non specificare affatto la cultura?

Da quello che ho letto, se stai facendo la serializzazione, ad esempio, hai bisogno di invarianteculture come mezzo per specificare una rappresentazione canonica di un valore dati.Questa è una percentuale relativamente piccola delle manipolazioni di stringa basate sulla cultura.

Lo trovo a lungo, verboso e brutto la maggior parte del tempo per specificarlo ogni volta che faccio, ad esempio:

var greeting = string.Format(CultureInfo.CurrentCulture, "Hello ", userName); 
.

Tuttavia, la mia squadra ha recentemente girato FxCop e ora c'è una spinta per usare sempre culturanfo ovunque.Qual è la tecnica migliore per combinare brevità, leggibilità e funzionalità?

Alcuni buoni materiali di lettura:

È stato utile?

Soluzione

C'è un compromesso intrinseco in gioco qui.

In un minimo, ti consigliamo di specificare CultureSinfo per utilizzare InvariantCulture ogni volta che stai facendo qualcosa di interno all'interno del tuo programma. Ad esempio, utilizzando questo con la serializzazione costringe la rappresentazione dei dati per essere sempre la stessa, quindi non devi preoccuparti dei problemi di internazionalizzazione con i tuoi formati di dati interni.

Detto questo, specificando questo ovunque ha alcuni vantaggi, principalmente in termini di forzandoti per assicurarti di gestirlo correttamente. Il lavoro interno del programma VS. UI funziona deve avere una cultura diversa specificata (a condizione che si desidera localizzare correttamente la propria applicazione). Di conseguenza, un programma complesso tende a richiedere che questo sia specificato ovunque, come lasciando il "default" è pericoloso al meglio e tende a introdurre bug nel tempo.

Tuttavia, specificandolo, come hai notato, tende ad aumentare le dimensioni del tuo codice e potenzialmente ridurre la leggibilità. Ciò porta alla leggibilità e alla manutenibilità tramite il codice più breve rispetto all'internazionalizzazione e alla localizzazione e alla manutenzione corretta tramite essere più esplicito ovunque.

A mio parere, non c'è risposta "giusta" qui - dipende davvero dalla tua applicazione. Se la tua applicazione è completamente sulla presentazione, e non facendo molta manipolazione dei dati, specialmente non con qualsiasi tipo di archiviazione di file autogestita, impostazione della coltura corrente (e della coltura dell'interfaccia utente) una volta potrebbe andare bene. Ho scoperto che le applicazioni più complicate tendono a non funzionare anche in questa moda, tuttavia, nel qual caso i suggerimenti FXCop di specificare questo ovunque sembrano più attraenti.

Altri suggerimenti

L'impostazione predefinita è già la cultura corrente come inizializzata da Windows.Quindi usare culturanfo.currentculture esplicitamente è solo una perdita di tempo.Qualsiasi formato di serializzazione decente (compresa la serializzazione binaria e la serializzazione XML) serializza un datetime in un modo invariante della cultura.

Usando una cultura che non è il valore predefinito è molto pericoloso.Un thread verrà sempre avviato con la cultura predefinita come specificato da Windows e configurato dall'utente quando ha installato Windows..NET avvia threadPool threads tutto il tempo e rischiare di ottenere una cultura in quel thread che è diverso dal tuo thread principale.Che può causare ogni sorta di problemi sottili.Come avere una lista di smistata che improvvisamente non è più ordinata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top