創建RegionInfo上市適用於文化的給定區域,這是我當前的代碼:一個比較文化區,而不從LCID
public IEnumerable<CultureInfo> ForRegion(RegionInfo regionInfo)
{
return CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Where(c => Equals(new RegionInfo(c.LCID), regionInfo));
}
,但我不喜歡在Where
創建RegionInfo
。
我真的想要做的事是:
public IEnumerable<CultureInfo> ForRegion(RegionInfo regionInfo)
{
return CultureInfo.GetCultures(CultureTypes.SpecificCultures)
.Where(c => c.LCID == regionInfo.LCID);
}
但是因爲沒有對RegionInfo
的LCID
我不能。除了更好的解決方案之外,知道爲什麼RegionInfo
沒有LCID
會很有趣。
試驗例:
[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"), //missing with Jon's solution
new CultureInfo("es-ES"),
new CultureInfo("eu-ES"),
new CultureInfo("gl-ES")
},
found);
}
這適用於我目前的解決方案,但不是喬恩的。
另外兩個試驗,失敗了喬恩的修改的方案(原創作品):
[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);
}
比爾布萊森: 「語言是與軍隊和海軍方言」。 –