如何将属性属性附加到const值

时间:2016-09-30 06:51:30

标签: c#

请考虑以下代码:

[Category("USER")]
public class Permissions 
{
    public const string Create= "USER-CREATE";

    public const string Edit= "USER-EDIT";
    .
    .
}

我想从const值中删除USER-部分,因为我按Category属性指定它。在这种情况下,当我调用USER-CREATE时,有没有办法获得Permissions.Create值?如果没有,如何用另一种方法实现相同的功能?

修改

我必须使用const值,因为我将使用属性。

例如:[Attribute(Permissions.Create)]

编辑我的真实案例

@HimBromBeere之后的新代码建议

[Permissions(Modules.Administration, HomePermissions.Category)]
public class UserPermissions 
{
    private const string Category = "USER";

    private const string Prefix = Modules.Administration + "-" + Category + "-"; 

    public const string Create = Prefix + "CREATE"; 
    public const string Edit = Prefix + "EDIT";
}

2 个答案:

答案 0 :(得分:1)

您可以在const - 类中定义私有Permissions,并将其添加到实际常量中。

[Category("USER")]
public class Permissions 
{
    private const string KEYWORD = "USER";

    public const string Create= KEYWORD + "-CREATE";    
    public const string Edit= KEYWORD + "-EDIT";
}

这不完全是你想要的,但至少避免了一些的重复。但是,您仍然需要两次"USER"值,一次在属性内,一次在私有const内。避免这种情况需要评估属性,这是一个运行时操作,并且不能在您的场景中使用。

编辑:你甚至可以用这个代替第一行:

[Category(Permissions.KEYWORD)]

现在所有相同字符串的重复都已消失。

答案 1 :(得分:0)

你绝对不能做到这一点。大多数情况下,编译时编译器将内联您的常量值。

相反,请使用静态只读限定符。您可以通过反思自由地改变它的价值。

另一种解决方案是使用方面。例如,您可以在PostSharp中看到它是如何完成的。 Basicaly它会对你的二进制文件进行后期处理并将代码注入其中。