从C#中的自定义字段属性获取值

今天早上我开始尝试使用自定义字段属性的快速练习。 尝试了很多东西并搜索了许多例子(大多数涉及类而不是字段属性),我正式陷入困境。

我的代码如下。 一个特点是该类是使用classbuilder在FileHelpers中构建的。 我的各种部分成功尝试确实设法从这个类中获取字段名,所以我相信这部分工作正常。

我想做什么(根据代码中的注释)是a)遍历字段,b)为每个字段运行,查看DBDataTypeAttribute属性是否存在,以及c)看似最难的部分 – 从属性中获取值(FieldType字符串) ,和AllowNulls bool)。

任何评论赞赏!

标记

class Program { static void Main(string[] args) { // Desired output: System.Type userType = null; userType = ClassBuilder.ClassFromString(@" public class ExpenseReport { [FieldQuoted('""', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)] [DBDataTypeAttribute(FieldType = ""varchar(1000)"", AllowNulls = true)] public String UniqueID; [FieldQuoted('""', QuoteMode.OptionalForRead, MultilineMode.AllowForRead)] public String ERNum; }"); object[] attributes; attributes = userType.GetCustomAttributes(typeof(DBDataTypeAttribute), true); foreach (Object attribute in attributes) { // Would like to be able to ID for each field whether the DBDataTypeAttribute is present, and get the FieldType and AllowNulls Values DBDataTypeAttribute a = (DBDataTypeAttribute)attribute; Console.WriteLine("Attribute: ", a.FieldType); Console.ReadLine(); } } } [AttributeUsage(AttributeTargets.Field)] public class DBDataTypeAttribute : System.Attribute { private string fieldtype; public string FieldType { get { return fieldtype; } } private string allownulls; public string AllowNulls { get { return allownulls; } } } 

很简单; 你必须从字段中获取它们,而不是类型。

 foreach( FieldInfo field in userType.GetFields() ) { DBDataTypeAttribute attribute = (DBDataTypeAttribute)Attribute.GetCustomAttribute(field, typeof(DBDataTypeAttribute)); if( attribute != null ) { // Do something with it. } }