繁体   English   中英

字典作为枚举

[英]Dictionary as an Enum

GML模式中的BasicTypes.xsd包括以下内容:

<simpleType name="SignType">
    <annotation>
        <documentation>
        gml:SignType is a convenience type with values "+" (plus) and "-" (minus).
        </documentation>
    </annotation>
    <restriction base="string">
        <enumeration value="-"/>
        <enumeration value="+"/>
    </restriction>
</simpleType>

代码生成器(sparx企业架构师)正在生成以下内容:

namespace OGC.GML.BasicTypes {
    /// <summary>
    /// gml:SignType is a convenience type with values "+" (plus) and "-" (minus).
    /// </summary>
    public enum SignType : int {
        -,
        +
    }
}

当然,我不能将-和+作为枚举键。 所以我的问题是:

我将如何定义字典对象以满足其原样? 或者,还有更好的方法? 请给出代码示例。

看来这些人正在使用数组

这是如何使用字典的示例。 字典的基本作用是将一个对象映射到另一个对象,在这种情况下,将字符串映射为int,如果愿意,可以始终使用不同类型的键和值。

        Dictionary<string, int> SignType = new Dictionary<string, int>();
        SignType.Add("-", 0);
        SignType.Add("+", 1);

        int plusValue = SignType["+"];

编辑:我再次更新了它

现在您可以像这样使用静态类

namespace OGC.GML.BasicTypes
{
    public static class SignType
    {
        public static Dictionary<string, int> Values = new Dictionary<string, int>();
        static SignType()
        {
            Values.Add("-", 0);
            Values.Add("+", 1);
        }
    }
}

并且您必须键入OGC.GML.BasicTypes.SignType.Values["+"]

或者,您可以使用实例类

    public class SignType
    {
        private static Dictionary<string, int> Values = new Dictionary<string, int>();
        public SignType()
        {
            Values.Add("-", 0);
            Values.Add("+", 1);
        }
        public int this[string s]
        {
            get { return Values[s]; }
        }
    }
}

这将允许`new OGC.GML.BasicTypes.SignType()[“ +”]'

即使BasicTypes是类而不是名称空间,也仍然可以在其中放入更多的Enum和Sub-Class,但这可能不是理想的解决方案,具体取决于名称空间的用途。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM