使用枚举项名称作为属性参数

时间:2012-08-29 16:36:15

标签: c# .net wcf-ria-services

我只是想不要为每个属性使用“Managers”,并为此使用一些枚举。

但似乎不可能或我错了?

所以我尝试替换

[RequiresRole("Managers")]

[RequiresRole(HardCodedRoles.Managers.ToString())]

...

public enum HardCodedRoles
{ 
            Administrators,
            Managers
}

3 个答案:

答案 0 :(得分:10)

如果一个类而不是一个枚举,让这个类保持静态以避免一个新的东西:它呢?

public static class HardCodedRoles
{
    public const string Managers = "Managers";
    public const string Administrators = "Administrators";
}

[RequiresRole(HardCodedRoles.Managers)] 

答案 1 :(得分:5)

您还可以使用nameof关键字,即:

[RequiresRole(nameof(HardCodedRoles.Managers))]

答案 2 :(得分:2)

您看到错误的原因是因为ToString()方法,因此无法在编译时计算该值。

如果您可以使用[RequiresRole(HardCodedRoles.Managers)],则可以在代码中的其他位置执行ToString,这可以为您提供所需的功能。这需要您将属性的参数从string更改为HardCodedRoles

(我认为使用const将不起作用,因为参数的类型仍为string,因此输入不会受到限制。)