今天早上,我开始了我认为使用自定义字段属性的快速练习。在尝试了很多事情并搜索了很多示例(大多数涉及类而不是字段属性)之后,我正式陷入困境。
我的代码如下。一个特点是该类是使用类构建器在 FileHelpers 中构建的。我的各种部分成功的尝试确实设法从此类中获取字段名,所以我相信该部分工作正常。
我想要做的(根据代码中的注释)是 a) 运行字段,b) 对于每个字段,查看 DBDataTypeAttribute 属性是否存在,以及 c) 看似最困难的部分 - 从属性获取值(FieldType 字符串)和AllowNulls 布尔值)。
任何意见表示赞赏!
Mark
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.
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)