Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从特定集合中选择选项_C#_.net_Organization - Fatal编程技术网

C# 从特定集合中选择选项

C# 从特定集合中选择选项,c#,.net,organization,C#,.net,Organization,我想知道解决以下问题的最佳方法是什么。假设您有一个可以将字符串转换为不同语言的类 string MyString = "Hello".Translate(Languages.European.Italian); 从上面可以看出,我要翻译的语言是意大利语,它嵌套在欧洲类型中。这里有一个“有效”的例子 存储或组织这些选项的最佳方式是什么 编辑: 这个例子的意图描述得很差。acutal语言翻译只有一个简单的值,比如int。我的总体目标可以描述为向枚举添加层次结构。希望下面的例子能更好地描述这个问题。

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

string MyString = "Hello".Translate(Languages.European.Italian);
从上面可以看出,我要翻译的语言是意大利语,它嵌套在欧洲类型中。这里有一个“有效”的例子

存储或组织这些选项的最佳方式是什么

编辑: 这个例子的意图描述得很差。acutal语言翻译只有一个简单的值,比如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));
我希望有更好的方法,因为这种方法看起来很奇怪

我遇到了这篇文章,它解释了如何创建类似于枚举的东西


抱歉搞混了

我认为您永远不会想要实例化语言结构。以和为例,遵循他们的先例

亚洲人可能是另一种类型,它有自己的对象来扩展语言

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 (){}
}

无论数据结构是最好的还是最可接受的设计,都需要保持一致。如果任何二级对象需要结构,则应将所有二级对象保留为结构:

public struct Languages
{
    public struct Asian
    {
         public enum Chinese{ Cantonese, Mandarin };
    }
    public struct European
    {
         public enum Latin { Italian, Spanish };
         public enum Nordic { German };
    }
} 

这就是说,我不认为这是正确的感觉,可能会变得非常恶劣。您可能想看看静态编码类是如何设计的,并从中得到一些提示。通过实例化语言结构(枚举是值类型)并不是在破坏任何OOP实践,这看起来很难维护,而且不具有很强的可扩展性。

因为枚举不支持继承,我将改用类:

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()
    { }
}

如果你想知道层次结构只有三个层次,就像你的例子一样

NoteTypes.CustomerService.ID
在不同名称空间(但在同一程序集中)中声明枚举是否可以解决您的问题


视情况而定。你想用它们做什么?我不会使用这种多层结构,因为你实际上并不需要它来实现你的目的,最终它将是非常可伸缩的。我会把我所有的语言都放在一个静态类中,甚至只使用
CultureInfo
类,比如
static string Translate(这个字符串文本,CultureInfo CultureInfo)
。我认为你是对的。我要试一试,看一看,我会接受的。
NoteTypes.CustomerService.ID
namespace NoteTypes { public enum Client { ID = 1, Name = 2}
public enum CustomerService { ID  = 1, Name = 2}}