将静态类常量强制作为数据类型

时间:2016-03-08 18:08:18

标签: c# class

我有一个带常量的静态类。我正在寻找创建一个方法的选项,该方法将字典作为参数并强制将该键作为静态类中的常量之一。这是我的常量静态类。
enter image description here

这是我想要做的 enter image description here

这就是我要强制执行的内容 enter image description here

3 个答案:

答案 0 :(得分:3)

从它的声音来看,Enum更适合你想要做的事情。

public enum MyConstants
{
    FirstName,
    LastName,
    Title
}

public void CreateMe(Dictionary<MyConstants, string> propertyBag)
{
    ...
}

<强>已更新

您可以将其与属性结合起来,将每个枚举与特定字符串关联起来,如下所示:

public enum PropertyNames
{
    [Description("first_name")]
    FirstName,
    [Description("last_name")]
    LastName,
    [Description("title")]
    Title
}

可以通过扩展方法轻松获取与每个枚举值关联的每个描述属性的值,如下所示:

public static class EnumExtensions
{
    public static string GetDescription(this Enum value)
    {
        FieldInfo fieldInfo = value.GetType().GetField(value.ToString());

        DescriptionAttribute[] attributes =
            (DescriptionAttribute[])fieldInfo.GetCustomAttributes(
            typeof(DescriptionAttribute),
            false);

        if (attributes != null &&
            attributes.Length > 0)
            return attributes[0].Description;
        else
            return value.ToString();
    }
}

然后在“CreateMe”方法中,您可以通过执行与此类似的操作来获取每个词典条目的描述和值:

void CreateMe(Dictionary<PropertyNames, string> propertyBag)
{
    foreach (var propertyPair in propertyBag)
    {
        string propertyName = propertyPair.Key.GetDescription();
        string propertyValue = propertyPair.Value;
    }
} 

答案 1 :(得分:2)

即使已经回答了这个问题,还有另一种方法,如下:

public class MyOwnEnum
{
    public string Value { get; private set; }

    private MyOwnEnum(string value)
    {
        Value = value;
    }

    public static readonly MyOwnEnum FirstName = new MyOwnEnum("Firstname");
    public static readonly MyOwnEnum LastName = new MyOwnEnum("LastName");
}

它的行为与Enum相同,可以在代码中使用相同的语法。我不能赞扬那些提出它的人,但我相信我在搜索具有多个价值的枚举时遇到了它。

答案 2 :(得分:0)

使用字符串,您可以强制执行以下事实:密钥来自有限的一组vialue编译时间。

使用枚举或自定义类(可能使用隐式转换为字符串)。