属性 的名称作为属性构造函数的输入
Name of a property as input to attribute constructor
我有一个自定义属性,我希望将 属性 的名称作为输入。因为名称是一个字符串,所以它是一个有效的输入类型(因为属性对于它们可以作为构造函数的输入的内容非常有限)。
但是我怎样才能做到这一点?
拿这个例子代码:
public class MyCustomAttribute : Attribute {
public MyCustomAttribute(string propertyName) {}
}
public class Foo {
public bool MyCustomProperty { get; set; }
[MyCustom(SomeMagicAppliedToMyCustomProperty)] // I want the attribute to receive something along the lines of "Foo.MyCustomProperty"
public void Bar();
}
我如何通过限制属性在其构造函数中接收的内容来完成此操作?
这是不可能的。
属性只能接受常量,只需将您的 MyCustomProperty 名称放在引号中放入属性中即可。
c#-6.0 nameof() 中有一个新功能,它以字符串形式给出特定 属性、变量、class 等的名称,
http://www.c-sharpcorner.com/UploadFile/7ca517/the-new-feature-of-C-Sharp-6-0-nameof-operator/
https://msdn.microsoft.com/en-us/magazine/dn802602.aspx
您也可以使用 CallerMemberNameAttribute
https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx
public CustomAttribute([CallerMemberName] string propertyName = null)
{
// ...
}
我已经在 C#6 的 MVC5 应用程序中使用了它
private const string jobScheduleBindingAllowed = nameof(JobSchedule.JobId) + ", " + nameof(JobSchedule.Time) + ", " + nameof(JobSchedule.EndTime) + ", " + nameof(JobSchedule.TimeZoneId);
然后当我想指定对模型有效的绑定时:
[HttpPost]
public ActionResult CreateJobSchedule([Bind(Include = jobScheduleBindingAllowed)]JobSchedule jobSchedule)
{
// stuff
}
有点麻烦,但比到处都有魔法字符串要好,而且类型安全,因此可以在编译时捕获由于重命名引起的错误。
我有一个自定义属性,我希望将 属性 的名称作为输入。因为名称是一个字符串,所以它是一个有效的输入类型(因为属性对于它们可以作为构造函数的输入的内容非常有限)。 但是我怎样才能做到这一点?
拿这个例子代码:
public class MyCustomAttribute : Attribute {
public MyCustomAttribute(string propertyName) {}
}
public class Foo {
public bool MyCustomProperty { get; set; }
[MyCustom(SomeMagicAppliedToMyCustomProperty)] // I want the attribute to receive something along the lines of "Foo.MyCustomProperty"
public void Bar();
}
我如何通过限制属性在其构造函数中接收的内容来完成此操作?
这是不可能的。 属性只能接受常量,只需将您的 MyCustomProperty 名称放在引号中放入属性中即可。
c#-6.0 nameof() 中有一个新功能,它以字符串形式给出特定 属性、变量、class 等的名称,
http://www.c-sharpcorner.com/UploadFile/7ca517/the-new-feature-of-C-Sharp-6-0-nameof-operator/ https://msdn.microsoft.com/en-us/magazine/dn802602.aspx
您也可以使用 CallerMemberNameAttribute https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx
public CustomAttribute([CallerMemberName] string propertyName = null)
{
// ...
}
我已经在 C#6 的 MVC5 应用程序中使用了它
private const string jobScheduleBindingAllowed = nameof(JobSchedule.JobId) + ", " + nameof(JobSchedule.Time) + ", " + nameof(JobSchedule.EndTime) + ", " + nameof(JobSchedule.TimeZoneId);
然后当我想指定对模型有效的绑定时:
[HttpPost]
public ActionResult CreateJobSchedule([Bind(Include = jobScheduleBindingAllowed)]JobSchedule jobSchedule)
{
// stuff
}
有点麻烦,但比到处都有魔法字符串要好,而且类型安全,因此可以在编译时捕获由于重命名引起的错误。