我正在创建一个查找类,因此将在所有项目中使用一个常量值。 问题是,有几种解决方案可以创建这样的东西。我可以创建一个包含枚举、结构或常量的类,或者为每个“对象”创建一个类。我想知道什么是最好的解决方案。
首先我想做这样的事情:
public static class Defines
{
public enum PAGELAYOUT_NAMES
{
STANDARD = "Standard"
}
}
但我个人不太喜欢在枚举中使用字符串。 另一种选择是使用结构,如果您看到代码,它会更加丑陋:
public static class Defines
{
public struct PAGELAYOUT_NAMES
{
public static string STANDAARD = "Standaard";
}
}
这看起来好一点,但是当有很多选项时可能会造成混淆:
public static class Defines
{
public const string PAGELAYOUT_NAMES_STANDARD = "Standard";
}
在写这篇文章时,我认为这将是最好/干净的选择:
public static class PageLayout
{
public const string STANDARD = "Standard";
}
还有其他建议吗? 在我看来,用几个只定义一些常量的类来填充项目会带来很多开销和困惑。
编辑 在原始上下文中不是很清楚,但查找值不仅限于字符串。下面一些非常好的建议只有当你只使用字符串时才有可能,但也需要支持 Int 的、DateTime 和其他类型。从这里的答案中得到了一些不错的想法,我将尝试哪一个最适合我当前的项目。
最终实现的解决方案 感谢下面的建议,我已经实现了这样的查找类:
internal class Base<T>
{
internal T Value{ get; private set;}
internal Base(T value)
{
Value = value;
}
}
public class PageLayout
{
public static string Standard { get { return new Base<string>("Standard").Value; } }
}
这是基于下面给出的答案。 原因是因为现在我也可以将它用于非字符串和整数,这对于带有描述和资源文件的枚举来说是不可能的,尽管这对我来说会更干净。
最佳答案
根据您的具体操作,您可能需要查看 Resources .
您定义一个 xml 文件(或使用设计器来帮助您),它会被编译成一个程序集(嵌入式程序集或“卫星程序集”)。
在解决方案资源管理器中右键单击类库下的属性节点,单击“打开”并转到资源选项卡。从那里开始非常简单。
设置完成后,很容易从代码中获取值,例如:-
String s = Resources.PageLayoutNames.Standard;
有一些并发症,但在不了解您的应用程序的情况下,我无法提供更多建议。我想到的是,如果您要对 ASP.NET 应用程序进行单元测试,则需要确保资源是嵌入的而不是部署为卫星,否则单元测试将无法运行。
它们也用于全局化,因此熟悉它们是件好事。
编辑:
或者在再次阅读您的问题后,我倾向于问“您到底需要字符串做什么?”。
你在做什么,你不能用一个枚举来做?
enum PageLayouts
{
Standard,
ExtraAwesome
}
如果您尝试将要显示的文本映射到枚举类型,有多种方法可以做到这一点,例如通过 using the DescriptionAttribute
enum PageLayouts
{
[Description("Standard")]
Standard,
[Description("Extra Awesome")]
ExtraAwesome
}
不过,您不能立即为 DescriptionAttribute 提供资源键。 You have to subclass it if you want to support globalisation...
关于c# - 查找类使用 enum、struct、public const 或其他东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4302737/