如何获取字段的自定义属性值?

我正在使用FileHelpers写出固定长度的文件。

public class MyFileLayout { [FieldFixedLength(2)] private string prefix; [FieldFixedLength(12)] private string customerName; public string CustomerName { set { this.customerName= value; **Here I require to get the customerName's FieldFixedLength attribute value** } } } 

如上所示,我想访问属性的set方法中的自定义属性值。

我该如何实现这一目标?

你可以使用reflection来做到这一点。

 using System; using System.Reflection; [AttributeUsage(AttributeTargets.Property)] public class FieldFixedLengthAttribute : Attribute { public int Length { get; set; } } public class Person { [FieldFixedLength(Length = 2)] public string fileprefix { get; set; } [FieldFixedLength(Length = 12)] public string customerName { get; set; } } public class Test { public static void Main() { foreach (var prop in typeof(Person).GetProperties()) { var attrs = (FieldFixedLengthAttribute[])prop.GetCustomAttributes (typeof(FieldFixedLengthAttribute), false); foreach (var attr in attrs) { Console.WriteLine("{0}: {1}", prop.Name, attr.Length); } } } } 

有关更多信息,请参阅此

这样做的唯一方法是使用reflection:

 var fieldInfo = typeof(MyFileLayout).GetField("customerName", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) var length = ((FieldFixedLengthAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(FieldFixedLengthAttribute))).Length; 

我已经使用以下FieldFixedLengthAttribute实现测试了它:

 public class FieldFixedLengthAttribute : Attribute { public int Length { get; private set; } public FieldFixedLengthAttribute(int length) { Length = length; } } 

您必须调整代码以反映属性类的属性。