To list the applicable crops for this region, this is my current code:
public IEnumerable<CultureInfo> ForRegion(RegionInfo regionInfo)
{
return CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Where(c => Equals(new RegionInfo(c.LCID), regionInfo));
}
But I do not like to create RegionInfoin Where.
I really want to do something:
public IEnumerable<CultureInfo> ForRegion(RegionInfo regionInfo)
{
return CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Where(c => c.LCID == regionInfo.LCID);
}
But since RegionInfono LCID, I can’t. Besides a better solution, it would be interesting to know why a RegionInfodoes not LCID.
Test example:
[TestMethod]
public void Can_find_all_by_region_ES_valencia()
{
var regionInfo = new RegionInfo(new CultureInfo("ca-ES-valencia").LCID);
List<CultureInfo> found = ForRegion(regionInfo).ToList();
Assert.AreEqual(5, found.Count);
CollectionAssert.AreEqual(
new[]
{
new CultureInfo("ca-ES"),
new CultureInfo("ca-ES-valencia"),
new CultureInfo("es-ES"),
new CultureInfo("eu-ES"),
new CultureInfo("gl-ES")
},
found);
}
This works for my current solution, but not for Jon's.
Two more tests, failure for a modified Jon solution (work for the original):
[TestMethod]
public void Can_find_all_by_region_Germany()
{
List<CultureInfo> found = ForRegion(new RegionInfo("DE")).ToList();
Assert.AreEqual(3, found.Count);
CollectionAssert.AreEqual(
new[] {new CultureInfo("de-DE"), new CultureInfo("dsb-DE"), new CultureInfo("hsb-DE")}, found);
}
[TestMethod]
public void Round_trip_all_cultures()
{
foreach (CultureInfo culture in CultureInfo.GetCultures(CultureTypes.SpecificCultures))
Assert.IsTrue(ForRegion(new RegionInfo(culture.LCID)).Contains(culture), culture.Name);
}