为反射提供参数元标记
本文关键字:参数 反射 | 更新日期: 2023-09-27 18:03:05
我想标记一个参数,这样我就可以通过反射读取标签。我想这样做的原因是因为我正在创建映射到数据库的业务层对象,并且我想将某些参数标记为"只读",例如在数据库中生成的uniqueidentifier
字段。
我已经遍历属性以填充参数。这是我如何赋值的一个片段…
foreach (var prop in this.GetType().GetProperties())
{
switch (prop.PropertyType.Name)
{
case "Int32":
int tmpInt = -1;
if (!DBNull.Value.Equals(rowFromDatabase[prop.Name]) && int.TryParse(rowFromDatabase[prop.Name].ToString(), out tmpInt))
{
prop.SetValue(sender, tmpInt);
}
break;
case "Boolean":
bool tmpBool = false;
if (!DBNull.Value.Equals(rowFromDatabase[prop.Name]) && bool.TryParse(rowFromDatabase[prop.Name].ToString(), out tmpBool))
{
prop.SetValue(sender, tmpBool);
}
break;
..............
continued...
..............
}
}
我希望能够通过上面显示的prop
变量访问参数上的某种元数据,我可以在其中指定一些额外的信息。我该怎么做呢?
编辑:我想这样设置元数据
[CustomTag]
public Guid ID { get; set; }
扩展System.Attribute
类,然后用自定义属性装饰您的属性。
public class ReadOnlyAttribute : System.Attribute
{
}
或
public class DbColumnInfoAttribute : System.Attribute
{
public string ColumnName {get; set; }
public bool Required { get; set; }
public DbColumnInfoAttribute( string name, bool req){
ColumnName = name;
Required = req;
}
}
然后使用它们:
public class YourClass
{
[ReadOnly]
[DbColumnInfo( "User_Name", true)]
public string UserName { get; set; }
}
通过反射读取它们:
var listOfAttrib = prop.GetCustomAttributes(typeof(MyAttribute), true);