如何将一组值作为枚举?

时间:2014-10-01 13:13:11

标签: c# .net enums

我正在创建一个库,用作API来处理特定网站。我在网站上列出了州和城市及其相应的ID。

状态列表及其城市列表必须可以在设计模式下访问(开发人员应该能够在不编译的情况下访问列表)。我通过使用静态变量创建静态类来完成此操作。

这是它的外观。

    public class States
    {
       public static readonly States Arizona = new States(451, "Arizona", "lat", "lon");
       //many of these here

       public States(int key, string value, string lat, string lon, Cities cities)
       {
        this.Key = key;
        this.Name = value;
        this.Latitude = lat;
        this.Longitude = lon;
        this.Cities = cities;
       }
    }
    public class Cities
    {
       public static readonly Cities Phoenix = new States(1, States.GetById(451), "Phoenix", "lat", "lon");

       public Cities(int key, States state, string value, string lat, string lon)
       {  
        this.Key = key;
        this.Name = value;  
        this.State = state;
        this.Latitude = lat;
        this.Longitude = lon;
       }
    }

它将用作:var x = States.Arizona.Phoenix.Key;

因此。通过States.GetById()获取特定枚举时 - 一切都很好。 但是......我应该如何为States.Cities做同样的事情?它肯定应该是一个集合,但是然后用户(开发人员)将无法选择特定的城市而无需调用"按名称查找"功能什么的。

可以为每个州做一个单独的课......但这听起来像是一个非常错误的方法。 这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

实际上,您需要为每个状态设置一个单独的类,通常派生一个基类来获取标准方法,属性等。

您遇到的问题通常是代码生成问题。你想拥有一堆代码,尽可能少。我们为c#代码生成数据库模型,我们发现XSLT对此很有用。我们有一个包含所有值的XML文件(由另一个工具提取),以及一个将其转换为类的XSLT。