2016-01-28 15 views
10

Creare una cultura informazioni con es-CA, che ovviamente non è correttodovrebbe un'eccezione, ma non è più lo fa.valido CultureInfo non getta CultureNotFoundException

Questo in precedenza ha lanciato un CultureNotFoundException: new CultureInfo("es-CA"). Ora sembra tornare a es con "Impostazioni locali sconosciute". Anche se, fare qualcosa come xy-ZZ funziona anche, che è piuttosto strano?

Perché questo non genera più un'eccezione? Questo è stato cambiato in una versione recente di .NET?

Update 1

La documentazione menzioni la seguente:

se il sistema operativo non supporta che la cultura, e se il nome non è il nome di una cultura complementare o sostitutiva, il metodo genera un'eccezione CultureNotFoundException.

Test su Windows 7, genera CultureNotFoundException ma su Windows 10 non genera l'eccezione.

+0

Deve esistere sulla macchina, poiché il comportamento non è stato modificato (https://msdn.microsoft.com/en-us/library/ky2chs3h(v=vs.110).aspx). – BalinKingOfMoria

+0

@BalinKingOfMoria, sto dicendo che ** non ** lancia un'eccezione, che dovrebbe. La cultura o il locale non esiste sulla mia macchina. –

+0

Lo so, ma volevo solo farti sapere che i documenti dicono che si comporta ancora in questo modo. – BalinKingOfMoria

risposta

2

Ora aggiungere una risposta in base ai commenti.

A causa dei cambiamenti nella progettazione di Windows, ora non c'è più "cultura non valida" se il nome corrisponde a BCP-47, quindi invece di lanciare un'eccezione .NET Framework/.NET Core accetta la nuova cultura.

È possibile fare riferimento a the GitHub discussion, e il sotto citazione,

Poiché il quadro dipende dal sistema operativo per ottenere le culture, del sistema operativo si sta muovendo per il modello di ogni BCP-47 Nome cultura diventare valida anche il sistema operativo non lo supporta. ad esempio, Windows 10 supporta qualsiasi nome di coltura ben formato anche se il sistema operativo non dispone di dati reali per tale cultura . ad esempio, se provi a creare una cultura "xx-XXXX" in Windows 10, avrà successo. considerando ciò, non ha senso che abbia l'enumerazione della cultura come qualsiasi insieme che restituiamo, non significa che queste sono le uniche culture supportate. esaminando il problema, la soluzione alternativa è accettabile. se davvero vuoi avere un modo migliore, possiamo considerare qualcosa come CultureInfo.TryGetCulture() ma come ho detto in precedenza spostandomi in avanti quasi tutte le culture saranno valide.

+0

Ciao, sono stato turbato da un mio test unitario che ha iniziato a fallire. Se analizza "not-a-valid-culture" che è considerato valido. Se wikipedia (https://en.wikipedia.org/wiki/IETF_language_tag#Syntax_of_language_tags) è corretto, allora questa dovrebbe comunque essere una cultura non valida. Comunque, grazie per le risposte. Ho imparato che dobbiamo approvare le nostre culture. –