This article has been localized into Dutch by the community.
De RegionInfo class
In het vorige artikel over de CultureInfo class bespraken we kort het land/regio deel ervan, maar we kunnen eigenlijk veel meer regio-gebaseerde dingen doen met één van de andere classes in de System.Globalization namespace: De RegionInfo class. Die bevat een boel nuttige informatie over een specifieke regio (meestal een land), bv. de naam en het symbool van hun valuta, en verder of ze het metrieke stelsel gebruiken of niet, enzovoorts.
Verkrijgen van een RegionInfo exemplaar
Om toegang te krijgen tot de regionale info, heb je een exemplaar van de RegionInfo class nodig. Die heeft een contructor die een ISO 3166 code kan nemen of de 'taalcode/regio-land code' (languagecode/region-country code) van de regio (bv. "nl-NL" of "en-US"). Hier is een voorbeeld.
RegionInfo regionInfo = new RegionInfo("en-US");
Console.WriteLine(regionInfo.EnglishName);
Dit betekent dat als je al een referentie hebt naar een CultureInfo class, je deze goed kunt gebruiken om er zeker van te zijn dat je de overeenkomstige RegionInfo krijgt. Zoal we geleerd hebben in een eerder artikel, heeft je applicatie altijd een terugval CultureInfo exemplaar waaraan je kunt refereren:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine(regionInfo.EnglishName);
Dit gezegd hebbende, kijken we nu naar een paar nuttige kenmerken van de RegionInfo class.
Belangrijke properties van de RegionInfo class
We hebben de EnglishName property al bekeken - hij retourneert de naam van de regio in het Engels. Maar natuurlijk is er nog meer goeds te vinden - bijvoorbeeld diverse properties die met valuta te maken hebben:
RegionInfo regionInfo = new RegionInfo("sv-SE");
Console.WriteLine(regionInfo.CurrencySymbol);
Console.WriteLine(regionInfo.ISOCurrencySymbol);
Console.WriteLine(regionInfo.CurrencyEnglishName);
Console.WriteLine(regionInfo.CurrencyNativeName);
Als we CurrencySymbol, ISOCurrencySymbol, CurrencyEnglishName en/of CurrencyNativeName gebruiken, krijgen we de info die we nodig hebben om valuta gerelateerde output te kunnen realiseren. Het resultaat ziet er zo uit (in dit geval voor Zweeds/Zweden):
kr
SEK
Swedish Krona
Svensk krona
Je kunt ook zien of de gegeven regio het metrieke stelsel gebruikt met de IsMetric property:
RegionInfo regionInfo = new RegionInfo(CultureInfo.CurrentCulture.Name);
Console.WriteLine("Is the metric system used in " + regionInfo.EnglishName + "? " + (regionInfo.IsMetric ? "Yes" : "No"));
Daarmee hebben we nu alle identiteit gerelateerde properties:
- Name brengt je de ISO 3166 code die taal en land/regio identificeert, bv. "nl-NL" voor Nederlands/Nederland.
- DisplayName brengt je de volledige naam van land.regio in de lokale .NET framework versie.
- EnglishName brengt je de volledige naam van land/regio in het Engels.
- NativeName brengt je de volledige naam van land/regio in de gevraagde taal, bv. "Nederland" bij nl-NL of "Deutschland" for de-DE.
- TwoLetterISORegionName brengt je de twee-letter ISO 3166 code voor land/regio, bv "NL" voor Nederland of "DE" for Duitsland.
- ThreeLetterISORegionName brengt je de drie-letter ISO 3166 code voor land/regio, bv. "NED" voor Nederland of "DEU" voor Duitland.
Vanzelfsprekend kunnen deze properties handig zijn als je informatie moet tonen over een land/regio, zoals we zullen zien in ons volgende voorbeeld.
Een lijst van landen krijgen met RegionInfo
In een vorig artikel liet ik zien hoe je een lijst van al de gedefinieerde culturen in het .NET framework kunt krijgen. Dat brengt ons een lijst van taal-land/regio combinaties. We kunnen dit gebruiken in combinatie met de RegioInfo class om een lijst van landen/regio's te krijgen:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
namespace RegionInfoCountries
{
class Program
{
static void Main(string[] args)
{
CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
List<RegionInfo> countries = new List<RegionInfo>();
foreach (CultureInfo ci in cultures)
{
RegionInfo regionInfo = new RegionInfo(ci.Name);
if (countries.Count(x => x.EnglishName == regionInfo.EnglishName) <= 0)
countries.Add(regionInfo);
}
foreach (RegionInfo regionInfo in countries.OrderBy(x => x.EnglishName))
Console.WriteLine(regionInfo.EnglishName);
}
}
}
Dit voorbeeld is wat langer dan de ander voorbeelden in dit artikel, maar laat ik het voor jou in kleinere stukken opdelen. We beginnen met een lijst van alle beschikbare, specifieke culturen. In het vorige artikel hebben we geleerd dat specifieke culturen die culturen zijn, welke een taal ÉN een regio/land definiëren. We maken een 'loop' door deze lijst en bij elke iteratie gebruiken we het CultureInfo exemplaar om een corresponderend RegionInfo exemplaar te creëren. We checken of een land met die naam al eerder is toegevoegd aan onze lijst, en zo niet, dan doen we dat alsnog. Als de 'doorloop' klaar is, hebben we nu een complete lijst van de landen die gedefinieerd zijn door het .NET framework. Deze kunnen we doorlopen en naar de console zenden, of gewoon van alles doen wat we nuttig zouden kunnen vinden.
Dit is een prachtig voorbeeld van wat je kunt bereiken met de combinatie van CultureInfo en RegionInfo. Maar laat ik benadrukken dat dit geen complete en accurate lijst van landen is. In plaats daarvan is het een lijst van landen zoals die gedefinieerd is in de versie van het .NET framework die je gebruikt. Dat betekent dat sommige landen er niet in voorkomen of hun naam hebben veranderd sinds de publicatie van de versie. Dus als je een lijst van landen nodig hebt die 100% accuraat en bijgewerkt is, zul je die waarschijnlijk zelf moeten maken en bijhouden.
Samenvatting
De RegionInfo class is in feite een extensie van de CultureInfo class met nog meer nuttige info over een specifiek land of regio. Je kunt er meer door te weten komen over de identiteit en valuta van een specifieke regio, en je kunt erdoor aan een lijst van landen/regio's komen.