如何用C#表示国家和语言?

Joa*_*nge 3 .net c# xml enums base-class-library

我将从xml中检索此数据,以便为数千个对象初始化它.

所以,如果MyObject有一个CountryLanguage属性,应该得到什么,以及应该如何他们都在代码和XML来表示.

我正在考虑使用Enum代码.

我只是在寻找其他人的意见,以找到最好的方法来做到这一点.所有的语言和国家是否都在BCL,所以我可以使用写一个语言?

此外Country,Language不应该合并.该Language不代表指定使用的语言Country.

如何最好地为代码和Xml实现这一点.

我应该这样做吗?:

<Language>English</Language>
Run Code Online (Sandbox Code Playgroud)

Jef*_*ser 8

考虑一下CultureInfo的构造函数,它以一个字符串为例(例如"en-us")

提供有关特定文化的信息(称为非托管代码开发的"区域设置").信息包括文化名称,书写系统,使用的日历以及日期和排序字符串的格式.

它与现实世界中实际使用的内容相当具体(例如,国家/语言对是有意义的).您还可以创建自己的文化.

您指定该语言可能不是该国家/地区使用的语言.你能澄清一下你究竟会用它做什么的吗?如果没有进一步的信息,您似乎正在尝试定义类似于CultureInfo的内容.

或者,你也可以定义一个简单的对象,它只有两个属性(国家和语言),其中Country是ISO 3166-2字符串,Language是ISO 639-1字符串,正如Edward Loper在下面建议的那样.

您可以将ISO代码列表存储在XML文件中,并使用传统技术对其进行解析.我建议CultureInfo,因为你指定你正在寻找BCL中已有的东西.

通常,开放集的框架设计指南不鼓励使用枚举:

不要将枚举用于开放集(例如操作系统版本,朋友名称等).

您可以采用混合方法,在其中定义两个静态类,其中包含一堆静态只读字符串

// ISO-3166-2 codes
public static Countries
{
   public static readonly string France = "FR";
   ...
}

// CultureInfo style codes
public static Languages
{
   public static readonly string BritishEnglish = "en-GB";
}
Run Code Online (Sandbox Code Playgroud)

更新:根据您的评论,这是专门针对电影的,您仍然可以使用CultureInfo来制作它的文化和内容的文化.除此之外的任何事情都可能使微软无法参与使其成为操作系统的一部分(参见本文).因此,您必须定义自己的.

  • +1 - 使用那里的东西.重新发明轮子是没有意义的. (3认同)