c# - 查找类使用 enum、struct、public const 或其他东西?

标签 c# dictionary constants lookup

我正在创建一个查找类,因此将在所有项目中使用一个常量值。 问题是,有几种解决方案可以创建这样的东西。我可以创建一个包含枚举、结构或常量的类,或者为每个“对象”创建一个类。我想知道什么是最好的解决方案。

首先我想做这样的事情:

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/

相关文章:

python:遍历列表并用相应的字典值替换元素

c# - 我应该使用 TCP 进行在线游戏吗?

c# - 如何允许在 DataGridView 上插入?

python - 确定列表中一列最长字符串长度的最快方法

c# - 访问存储在 Action[] 字典中的多个方法

c++ - 为什么 C 不允许从 char ** 到 const char *const * 的隐式转换(而 C++ 允许)?

c++ - 将 `T const &&t` 与 `int const *` 匹配时 C++ 模板函数参数推导的说明

r - R 中的物理常数

c# dllimport with pointers 收藏

c# - 如何使用RouteUICommand?