2016-01-28 6 views
10

Создание инфо культуры с es-CA, который явно не неверен должен бросить исключение, но больше не делает.Invalid CultureInfo больше не бросает CultureNotFoundException

Этот ранее был выброшен CultureNotFoundException: new CultureInfo("es-CA"). Кажется, теперь он возвращается к es с «Неизвестной локалью». Хотя, что-то вроде xy-ZZ также работает, что довольно странно?

Почему это больше не исключение? Было ли это изменено в последней версии .NET?

Update 1

В документации говорится следующее:

если операционная система не поддерживает эту культуру, и если имя не название дополнительного или замены культуры, метод генерирует исключение CultureNotFoundException.

Тестирование этого на Windows 7, оно выбрасывает CultureNotFoundException, но в Windows 10 оно не генерирует исключения.

+0

Он должен существовать на вашем компьютере, поскольку поведение не изменилось (https://msdn.microsoft.com/en-us/library/ky2chs3h(v=vs.110).aspx). – BalinKingOfMoria

+0

@BalinKingOfMoria, я говорю, что это ** не ** бросает исключение, которое оно должно. Культура или местность не существует на моей машине. –

+0

Я знаю, но я просто хотел сообщить вам, что документы говорят, что все еще ведет себя так. – BalinKingOfMoria

ответ

2

Теперь добавьте ответ на основе комментариев.

Из-за изменений в дизайне Windows теперь больше нет «недопустимой культуры», если имя соответствует BCP-47, поэтому вместо исключения исключения .NET Framework/.NET Core принимает новую культуру.

Вы можете обратиться к the GitHub discussion и ниже цитаты,

Поскольку структура зависит от операционной системы для получения культур, то ОС, движется к модели любой BCP-47 название культуры вступают в силу даже ОС не поддерживает его. например, Windows 10 поддерживает любое хорошо сформированное название культуры, даже у ОС нет реальных данных для такой культуры . например, при попытке создать культуру «xx-XXXX» в Windows 10 она будет успешной. учитывая, что нет смысла в иметь перечисление культуры как любой набор, который мы возвращаем, не означает, что это - только поддерживаемые культуры. глядя на вашу проблему, вы обходитесь приемлемым. если действительно хотите иметь более лучший способ, мы можем рассмотреть что-то вроде CultureInfo.TryGetCulture(), но, как я сказал ранее, перемещение вперед практически любой культуры будет действительным.

+0

Здравствуйте, меня беспокоит одно из моих модульных тестов, которые начинают сбой. Если анализирует «не-правильную культуру», которая считается действительной. Если wikipedia (https://en.wikipedia.org/wiki/IETF_language_tag#Syntax_of_language_tags) правильна, то это все равно будет недопустимой культурой. Во всяком случае, спасибо за ответы. Я узнал, что мы должны сворачивать свою собственную проверку для наших культур. –

Смежные вопросы