请考虑以下代码:
[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";
}
答案 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它会对你的二进制文件进行后期处理并将代码注入其中。