2012-02-10 18 views
7

Potrzebuję uzyskać System.Globalization.CultureInfo dla różnych kodów walut.uzyskać CultureInfo z kodu waluty?

Przykłady: EUR, GBP, USD

Obecnie robie następujących wewnątrz instrukcji switch w oparciu o ten 3 litera kodu waluty, oczywiście nie jest to sposób, aby to zrobić:

var ci = new System.Globalization.CultureInfo("en-US"); 

Ktoś ma czysty sposób, aby osiągnąć te same wyniki, używając zamiast tego kodu waluty?

+1

Jakiej kultury mógłbyś oczekiwać od EUR, gdy istnieje wiele kultur z tą samą walutą? –

+0

Wiele kultur współdzieli walutę. Jak zamierzasz to zamapować? Na co na przykład mapuje EUR? – tdammers

+1

Myślę, że to odpowiada na moje pytanie, chciałbym FR-FR, więc będę musiał utworzyć tabelę odnośników dla wyników, które chcę - dzięki Jon Skeet! – Slee

Odpowiedz

12

Krótko: To niemożliwe. Na przykład EUR zostanie przypisany do DE-DE, FR-FR, NL-NL i innych krajów. Nie ma mapowania z waluty na kulturę, ponieważ wiele krajów ma wspólne waluty.

16
static IEnumerable<CultureInfo> GetCultureInfosByCurrencySymbol(string currencySymbol) 
{ 
    if (currencySymbol == null) 
    { 
     throw new ArgumentNullException("currencySymbol"); 
    } 

    return CultureInfo.GetCultures(CultureTypes.SpecificCultures) 
     .Where(x => new RegionInfo(x.LCID).ISOCurrencySymbol == currencySymbol); 
} 

Na przykład

foreach (var culture in GetCultureInfosByCurrencySymbol("GBP")) 
{ 
    Console.WriteLine(culture.Name); 
} 

wydruki:

cy-GB 
gd-GB 
en-GB 
+0

Wszystko, czego potrzebowałem, to wyszukiwanie kodu ISO ("GBP") i liczba miejsc, które można wykorzystać (2), więc ta metoda zadziałała u mnie. Właśnie wziąłem pierwszą kulturę i użyłem culture.NumberFormat.CurrencyDecimalDigits do zbudowania odnośnika przy starcie. Zakłada to, że wszystkie kultury, które dzielą walutę, używają takiej samej liczby dec miejsc, co jest wystarczająco dobrym założeniem dla moich morświnów. –