从属性构造函数中获取应用了哪个属性的成员?

我有一个自定义属性,在我的自定义属性的构造函数中我想将我的属性的属性值设置为我的属性应用到的属性的类型,是否有某种程度来访问该属性应用于的成员从我的属性类里面?

我害怕,属性不会这样。 它们仅仅是“标记”,附着在物体上,但无法与它们相互作用。

属性本身通常应该没有行为,只包含它们所附加类型的元数据。 与属性关联的任何行为都应由另一个查找属性存在并执行任务的类提供。

如果您对应用该属性的类型感兴趣,那么该信息将在您反映获取属性的同时可用。

可以从.NET 4.5使用CallerMemberName

 [SomethingCustom] public string MyProperty { get; set; } 

然后你的属性:

 [AttributeUsage(AttributeTargets.Property)] public class SomethingCustomAttribute : Attribute { public StartupArgumentAttribute([CallerMemberName] string propName = null) { // propName = "MyProperty" } } 

你可以做下一个。 这是一个简单的例子。

 //target class public class SomeClass{ [CustomRequired(ErrorMessage = "{0} is required", ProperytName = "DisplayName")] public string Link { get; set; } public string DisplayName { get; set; } } //custom attribute public class CustomRequiredAttribute : RequiredAttribute, IClientValidatable { public string ProperytName { get; set; } public IEnumerable GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { var propertyValue = "Value"; var parentMetaData = ModelMetadataProviders.Current .GetMetadataForProperties(context.Controller.ViewData.Model, context.Controller.ViewData.Model.GetType()); var property = parentMetaData.FirstOrDefault(p => p.PropertyName == ProperytName); if (property != null) propertyValue = property.Model.ToString(); yield return new ModelClientValidationRule { ErrorMessage = string.Format(ErrorMessage, propertyValue), ValidationType = "required" }; } }