我有一个类的属性集合,我想循环遍历每个属性。每个属性可能有自定义属性,因此我想循环遍历这些自定义属性。在这种特殊情况下,我的City类上有一个自定义属性,如下所示:
public class City
{
[ColumnName("OtroID")]
public int CityID { get; set; }
[Required(ErrorMessage = "Please Specify a City Name")]
public string CityName { get; set; }
}
该属性被定义为:
[AttributeUsage(AttributeTargets.All)]
public class ColumnName : System.Attribute
{
public readonly string ColumnMapName;
public ColumnName(string _ColumnName)
{
this.ColumnMapName= _ColumnName;
}
}
当我尝试循环遍历属性[这个循环正常工作],然后循环遍历属性时,它只忽略了属性的for循环,并且没有返回任何内容。
foreach (PropertyInfo Property in PropCollection)
//Loop through the collection of properties
//This is important as this is how we match columns and Properties
{
System.Attribute[] attrs =
System.Attribute.GetCustomAttributes(typeof(T));
foreach (System.Attribute attr in attrs)
{
if (attr is ColumnName)
{
ColumnName a = (ColumnName)attr;
var x = string.Format("{1} Maps to {0}",
Property.Name, a.ColumnMapName);
}
}
}
当我进入具有自定义属性的立即窗口时,我可以执行以下操作:
?Property.GetCustomAttributes(true)[0]
它将返回ColumnMapName: "OtroID"
但我似乎无法通过编程使其正常工作
ColumnNameAttribute
。 - Heinzitypeof(T)
中的T
是什么?在即时窗口中,您调用了Property.GetCustomAttribute(true)[0]
,但在 foreach 循环内部,您却在类型参数上调用 GetCustomattributes。 - Dr. Andrew Burnett-Thompson