从特定集中选择一个选项

时间:2011-07-14 17:43:01

标签: c# .net organization

我想知道以下问题的最佳方法是什么。假设您有一个可以将字符串转换为不同语言的类。

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

抱歉这个混乱!

4 个答案:

答案 0 :(得分:1)

我认为你不会想要实例化一个语言结构。以StringComparerEncoding为例,按照先例进行操作。

亚洲人可能是另一种具有扩展语言

的对象的类型
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}}