Pergunta

Qual é a melhor prática para especificar CurrentCulture ou InvariantCulture e não especificar a cultura?

Pelo que li, se você estiver fazendo serialização, por exemplo, precisará de InvariantCulture como meio de especificar uma representação canônica de um valor de dados.Essa é uma porcentagem relativamente pequena de manipulações de strings baseadas em cultura.

Acho longo, detalhado e feio na maioria das vezes especificá-lo sempre que o faço, digo:

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

No entanto, minha equipe ativou recentemente o FxCop e agora há uma pressão para sempre usar o CultureInfo EM TODOS OS LUGARES.Qual é a melhor técnica para combinar brevidade, legibilidade e funcionalidade?

Algum bom material de leitura:

Foi útil?

Solução

Há uma compensação inerente em jogo aqui.

No mínimo, você desejará especificar CultureInfo para usar InvariantCulture sempre que estiver fazendo algo interno em seu programa.Por exemplo, usar isso com serialização força a representação dos dados a ser sempre a mesma, para que você não precise se preocupar com problemas de internacionalização com seus formatos de dados internos.

Dito isto, especificar isso em todos os lugares tem algumas vantagens - principalmente em termos de forçá-lo a ter certeza de que está lidando com isso corretamente.Trabalho interno do programa vs.O trabalho da UI precisa ter uma cultura diferente especificada (desde que você queira localizar seu aplicativo adequadamente).Como resultado, um programa complexo tende a exigir que isso seja especificado em todos os lugares, pois deixar o "padrão" é, na melhor das hipóteses, perigoso e tende a introduzir bugs ao longo do tempo.

No entanto, especificar isso, como você percebeu, tende a aumentar o tamanho do seu código e, potencialmente, reduzir a legibilidade.Isto leva ao compromisso - legibilidade e facilidade de manutenção através de código mais curto vs.internacionalização e localização adequadas e capacidade de manutenção sendo mais explícita em todos os lugares.

Na minha opinião, não há uma resposta "certa" aqui - isso realmente depende da sua aplicação.Se o seu aplicativo é totalmente voltado para apresentação e não faz muita manipulação de dados, especialmente com qualquer tipo de armazenamento de arquivos autogerenciado, definir a cultura atual (e a cultura da interface do usuário) uma vez pode ser adequado.Descobri que aplicativos mais complicados tendem a não funcionar tão bem dessa maneira, porém, nesse caso, as sugestões do FxCop de especificar isso em todos os lugares parecem mais atraentes.

Outras dicas

O padrão já é a cultura atual inicializada pelo Windows.Portanto, usar CultureInfo.CurrentCulture explicitamente é apenas uma perda de tempo.Qualquer formato de serialização decente (incluindo serialização binária e serialização XML) serializará um DateTime de maneira invariável à cultura.

Usar uma cultura que não seja a padrão é muito perigoso.Um thread sempre será iniciado com a cultura padrão especificada pelo Windows e configurada pelo usuário quando ela instalou o Windows.O .NET inicia threads do pool de threads o tempo todo e você corre o risco de obter uma cultura nesse thread que seja diferente do seu thread principal.O que pode causar todos os tipos de problemas sutis.Como ter um SortedList que de repente não está mais classificado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top