【问题标题】:Can I get enum like functionality for strings in .net?我可以在.net 中获得类似字符串的枚举功能吗?
【发布时间】:2011-11-15 08:58:04
【问题描述】:

我正在尝试想出一种方法来保存要在我的项目中使用的字符串列表。

假设我有一个网站列表:

www.website1.com
www.website2.com
www.website3.com
www.website4.com

我希望我能得到一些类似于枚举与整数一起工作的东西。

当有人需要检查 url 时,他们会有一个可供选择的列表,并且可能会写出这样的内容

WebsiteNames.Website1

有没有好的(干净的)方法来做到这一点?

【问题讨论】:

  • 如果 'someone'='user' 那么只使用数组?另外,这些东西不应该是硬编码的,一定要使用配置文件或数据库。
  • 我可能会继续 Wouter de Kort 的建议:msdn.microsoft.com/en-us/library/bb126445.aspx

标签: .net string list enums


【解决方案1】:

你可以像这样使用静态类:

public static class WebSiteNames
{
   public readonly string Website1 = "www.website1.com";
   public readonly string Website2 = "www.website2.com";
}

然后你可以像这样使用它:

WebSiteNames.Website1

如果您查看T4,您甚至可以自动生成这样的文件,这样您就不必担心如果有人更改了代码中的某些内容,您将不必担心手动编写或运行时错误。

【讨论】:

    【解决方案2】:

    这样的班级应该这样做:

    public static class WebSiteNames
    {
      public static readonly string Website1 = "www.website1.com";
      public static readonly string Website2 = "www.website2.com";
    }
    

    如果一个字段是公开的,通常最好将其设为静态只读而不是 const,因为字符串值的任何更改都需要重新编译所有相关模块才能获得更改。

    【讨论】:

      【解决方案3】:

      您可以像这样使用struct

      public struct WebSiteNames
      {
          public const string Website1 = "www.website1.com";
          public const string Website2 = "www.website2.com";
          public const string Website3 = "www.website3.com";
          public const string Website4 = "www.website4.com";
      }
      

      由于structvalue type,其用法类似于enums

      【讨论】:

      • 在这里使用结构体有什么好处?静态类是更好的选择;你在这里不需要值类型语义,所以使用结构只是令人困惑......
      • 另外,使用结构会阻止您将其设为静态,并且您无法将默认构造函数设为私有。所以可以创建这种类型的实例,完全没有意义
      猜你喜欢
      • 2021-03-10
      • 1970-01-01
      • 2016-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 1970-01-01
      相关资源
      最近更新 更多