2013-01-10 9 views
12

나는 다음을 수행하여 RegionInfo을 얻을 수 있어야합니다.국가 정보로 지역 정보를 받으시겠습니까?</p> <pre><code>new RegionInfo("United Kingdom"); </code></pre> <p>을하지만,이 예외가 발생하고 인식하지 못하는 것을 말한다 :

page on RegionInfo은 '이름이 유효한 국가/지역 이름이 아닌 경우'예외가 발생한다고 말합니다.

아직이 pageUnited Kingdom을 포함하는 클래스에서 사용하는 미리 정의 된 지역의 목록을 지정합니다. 그렇다면 국가 이름이 새로 지정된 RegionInfo을 만들지 않는 이유는 무엇입니까? 은 MSDN 페이지에서

+3

설명서를 잘 읽으십시오. RegionInfo 이름은 국가/지역에 대해 ISO 3166에 정의 된 두 자리 코드 중 하나입니다. –

답변

28
var regions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.LCID)); 
    var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(name)); 

를 사용할 수 있습니다. 이것은 당신에게 comboboxes 같은 것들을 채울 수있는 능력을 제공합니다.

+1

'EnglishName'이 "English (United Kingdom)"이기 때문에 null이됩니다 ;-) 그래서 FirstOrdefault (r => r.EnglishName.Contains (name))를 사용하고 싶을 것입니다. –

+0

@LukeHennerley : 여전히 'null'이 되겠지만 지금은 예외가 아닙니다. +1은'=='대신에'Contains'가 너무 관대하기 때문에 어쨌든 +1합니다. –

+0

그것은 나를 위해 작동합니다, EnglishName은 "영국"으로 나타납니다 – DevDave

0

봐 :

A string containing one of the two-letter codes defined in ISO 3166 for country/region.

당신은 영국의 ISO 3166 코드, 국가의 이름이 아닌 필요합니다.

여기는 code you need입니다.

2

당신은 또한 링크 같은 페이지가 말한다 :

RegionInfo 이름은 국가/지역 ISO 3166에 정의 된 두 문자 코드 중 하나입니다. 사례는 중요하지 않습니다. 그러나 이름, TwoLetterISORegionName 및 ThreeLetterISORegionName 속성 은 대문자로 적절한 코드를 반환합니다.

코드는 페이지에 있으며 GB은 영국의 2 글자 코드로 표시됩니다 (검색하기가 어려울 정도로 코드 순서가 있습니다!).

new RegionInfo("GB"); 

을 아니면 닷넷 2.0을 사용하는 경우, 당신이 전체 문화 이름 사용 권장 : 그래서 이것을 시도 MSDN에서

new RegionInfo("en-GB"); 
+0

원본 포스터는 이전 버전의 사양을 연결했습니다. .NET 2.0 이후로 예를 들어. ' "GB"대신''en-GB ''를 사용합니다. –

+1

좋아요. GB의 다른 가능성은 _ 웨일스 어 (영국) _''cy-GB '''_ 스코티시 가엘 (영국) _''gd-GB''입니다. –

2

을;

국가/지역의 ISO 3166에 정의 된 두 자리 코드가 포함 된 문자열입니다.

UNITED KINGDOM는 ISO 웹 사이트의 Country names and code elements에서 확인됩니다.

기가바이트 영국

으로 시도

;

new RegionInfo("GB"); 
+0

원본 포스터는 이전 버전의 사양을 연결했습니다. .NET 2.0 이후로 예를 들어. ' "GB"대신''en-GB ''를 사용합니다. –

0

.NET Framework 2에서 변경된 내용을 설명하는 name 매개 변수의 메타 데이터에서이 주석을 확인하십시오.0 :

//  A string containing one of the two-letter codes defined in ISO 3166 for country/region.-or-Beginning 
    //  in .NET Framework version 2.0, a string containing the culture name for a 
    //  specific culture, custom culture, or Windows-only culture. If the culture 
    //  name is not in RFC 4646 format, your application should specify the entire 
    //  culture name, not just the country/region. 
1

내가 요약 내가 비주얼 스튜디오에서 볼 수있는 생성자로 이동 한 경우는 말한다 :

이름 : 에 대한 ISO 3166에서 정의 된 두 자리 코드를 포함하는 문자열 국가 또는 지역입니다. 또는 특정 문화권, 사용자 지정 문화권 또는 Windows 전용 문화권의 문화권 이름이 포함 된 문자열입니다. 문화권 이름이 RFC 4646 형식 인이 아닌 경우 응용 프로그램은/region 대신 전체 문화권 이름을 지정해야합니다.

전체 문화권 이름은 'en-GB'입니다. 당신이 국가의 이름으로 RegionInfo을 얻고 싶은 경우에

은 또는 당신은 당신이 IEnumerable<RegionInfo>을 얻을 다음과 같은 위의 EnglishName을 기준으로 필터링 할 수있는, 'GB'

+0

원본 질문에 대한 링크와 비교하여 [최신 버전의 문서 페이지] (http://msdn.microsoft.com/en-us/library/atwc2921.aspx)가 있습니다. ''GB ''대신''en-GB ''와 같은 완전한 문화권을 사용하는 것이 분명합니다. 우리는 원래 포스터에서 사용 된 프레임 워크의 버전을 알지 못하지만 'new RegionInfo ("ko-GB")'와 함께해야합니다. –