从C#中的自定义字段属性中获取值
问题描述:
今天早上我开始了我认为是使用自定义字段属性的快速练习。经过许多尝试并搜索了很多例子(大多数涉及类而不是字段属性),我被正式卡住了。从C#中的自定义字段属性中获取值
我的代码如下。其中一个特点是该类是使用类构建器在FileHelpers中构建的。我的各种部分成功的尝试确实设法从这个类中获取字段名,所以我相信部分工作正常。
我想做的事情(根据代码中的注释)是a)遍历字段,b)为每个字段查看是否存在DBDataTypeAttribute属性,以及c)看似最难的部分 - 从属性(FieldType字符串和AllowNulls布尔)。
任何意见赞赏!
马克
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.
}
}
谢谢Sven。在'做些什么'的情况下,如何获得FieldType和AllowNulls的值(在本例中为varchar(1000)和true)这是我无法做到的。 – Glinkot 2011-06-12 07:41:53
只需使用'attribute.FieldType'和'attribute.AllowNulls'属性即可。你遇到了什么问题? – Sven 2011-06-12 07:47:18
根本没有!我试图使用gettype等另一种方法,甚至没有看到那些属性。谢谢你的帮助! – Glinkot 2011-06-12 08:33:26