我想知道以下问题的最佳方法是什么。假设您有一个可以将字符串转换为不同语言的类。
string MyString = "Hello".Translate(Languages.European.Italian);
从上面你可以看到我要翻译的语言是意大利语,它嵌套在欧洲类型中。这是一个“有效”的例子。
public struct Languages
{
public struct Asian
{
public enum Chinese{ Cantonese, Mandarin };
}
public enum European { Italian, German };
}
存储或整理这些选项的最佳方法是什么?
修改 这个例子的意图很难描述。实际的语言翻译只有一个简单的值,就像一个int。我的总体目标可以描述为向枚举添加层次结构。希望以下示例有助于更好地描述问题...目前在我的工作中,我们处理以下结构,以便将与特定人员相关的注释写入数据库。
public struct NoteTypes
{
public struct Client
{
public static ID = 1;
}
public struct CustomerService
{
public static ID = 2;
}
}
WriteToDB(new Note("Hello World", NoteTypes.CustomerService.ID));
我希望有更好的方法来做到这一点,因为这种方式看起来很奇怪。
我遇到过这篇文章,解释了如何创建类似于枚举的东西。 http://www.codeproject.com/KB/cs/EnhancedEnums.aspx
抱歉这个混乱!
答案 0 :(得分:1)
我认为你不会想要实例化一个语言结构。以StringComparer和Encoding为例,按照先例进行操作。
亚洲人可能是另一种具有扩展语言
的对象的类型public abstract class Language
{
public static readonly AsianLanguage Asian = AsianLanguage.Instance;
public static readonly EuropeanLanguage European = EuropeanLanguage.Instance;
}
public class AsianLanguage
{
public static readonly AsianLanguage Instance = new AsianLanguage ();
public Language Cantonese {get;private set};
public Language Mandarin {get;private set};
private AsianLanguage (){}
}
public class EuropeanLanguage
{
public static readonly EuropeanLanguage Instance = new EuropeanLanguage ();
public Language Italian {get;private set;}
public Language German {get;private set;}
private EuropeanLanguage (){}
}
答案 1 :(得分:1)
因为枚举不支持继承,所以我将使用类:
public class Language
{
public static readonly UnSpecified = new Laguage();
protected Language()
{ }
}
public class Asian : Language
{
public static readonly Language Cantonese = new Asian();
public static readonly Language Mandarin = new Asian();
protected Asian() : base()
{ }
}
public class European : Language
{
public static readonly Language Italian = new European();
public static readonly Language German = new European();
protected European() : base()
{ }
}
答案 2 :(得分:0)
无论数据结构是最佳还是最可接受的设计,您都需要保持一致。如果任何第二级对象需要结构,那么您应该将所有第二级对象保持为结构:
public struct Languages
{
public struct Asian
{
public enum Chinese{ Cantonese, Mandarin };
}
public struct European
{
public enum Latin { Italian, Spanish };
public enum Nordic { German };
}
}
那就是说,我不认为这有正确的感觉,可能会变得非常讨厌。您可能想要了解静态Encoding类是如何设计的,并从中获取一些线索。并不是你通过实例化语言结构(枚举是值类型)来破坏任何类型的OOP实践,这看起来很难维护而且不是很可扩展。
答案 3 :(得分:0)
如果你的层次结构只有三个层次,就像在你的例子中那样
NoteTypes.CustomerService.ID
在不同的命名空间中声明枚举(但在同一个程序集中解决您的问题)?
namespace NoteTypes { public enum Client { ID = 1, Name = 2}
public enum CustomerService { ID = 1, Name = 2}}