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}}