最佳方式

问题描述:

我创建类库用一些常用的类,如该库将在多语言应用程序中使用的人,地址等,我正在寻找最便捷的方式来表示一个人的性别。最佳方式

我非常希望能够为这样的代码:

Person person = new Person { Gender = Genders.Male, 
          FirstName = "Nice", 
          LastName = "Dude" } 

if (person.Gender == Genders.Male) 
    Console.WriteLine("person is Male"); 

Console.WriteLine(person.Gender); //Should output: Male 

Console.WriteLine(person.Gender.ToString("da-DK")); 
//Should output the name of the gender in the language provided 

List<Gender> genders = Genders.GetAll(); 
foreach(Gender gender in genders) 
{ 
    Console.WriteLine(gender.ToString()); 
    Console.WriteLine(gender.ToString("da-DK")); 
} 

你会做什么?一个枚举和一个专门的性别课程?但是,那么本地化呢?


编辑:我想指出的是,这个问题至少是尽可能多的关于如何一些类,使我们在上面写代码的代码,我没有性别阶级或性别枚举,我试图弄清楚如何编写能够实现上述代码的代码。性别课程将是什么样子?你会使用性别的枚举吗?

问候
加斯帕豪格

+4

多少性别,你支持谁? – Krisc 2010-04-27 14:58:12

+2

@Krisc:这是一个很好的问题!作为一个男女双性恋者,我讨厌恨Hate HATE这个让我选择代表只有我一半的东西的软件!谢谢你的慰问!!! – 2010-04-27 15:00:56

我不会用枚举,可能会选择与内部创建Gender类构造函数以及一个包含可用选项作为属性的静态类。这与.NET中使用的方法基本相同,例如System.Drawing.Color及其关联的Colors类。

它更容易应对全球化,如果你有一类,而不是在我看来,一个枚举。

+0

检查了它在System.Drawing.Color中完成的方式并进行了仿真。似乎工作。谢谢! – Hauge 2010-04-28 07:23:18

您可以通过使用资源字符串解决本地化问题。 您可以为每个性别值创建一个资源字符串,并对您支持的每种文化进行翻译。

您的业务和数据类别不应该关心您正在进行本地化的事实,因为本地化(应该是)完全显示端操作。因为它具有可读性和可维护性,所以请使用您所拥有的。

要本地化的值,.NET已经具有自动选择基于CurrentUICulture值相应的资源价值内置的资源管理器。对于这种特定情况,您可以使用枚举中的ToString()值作为资源文件中的键。这将允许您创建不同的文化不同的文件(如会议和资源管理器所期待的),每个与"Male""Female"不同的值。

http://msdn.microsoft.com/en-us/magazine/cc163609.aspx

http://msdn.microsoft.com/en-us/library/aa309421%28VS.71%29.aspx

+1

和'雌雄同体',也许还有其他的价值。 – ANeves 2010-04-27 15:19:00

+0

+1这是正确的答案,只是因为它运行在另一种语言并不意味着*源代码*需要翻译... – 2010-04-27 15:40:19

+0

我可以看到你的意思是关于分离的BOL和本地化,将走那条路。我的主要问题是如何构建能够编码的类,如我的问题所示,所以我给了JoãoAngelo答案,因为他向我展示了如何做到这一点的一个例子。 – Hauge 2010-04-28 07:26:27

另一种选择是创建您的枚举类型的扩展方法。例如:

public static class GenderExtensions 
{ 
    public static string ToLocalizedText(this Gender gender) 
    { 
     // Lookup Localized content based on state of 'gender' 
     return "This person is male"; 
    } 
} 

然后你就可以简单地写

gender.ToLocalizedText() 

,而不是

gender.ToString()