Jor*_*dan 5 c# asp.net reflection custom-attributes
所以我有一个我想要循环的类的属性集合.对于每个属性,我可能有自定义属性,所以我想循环这些属性.在这种特殊情况下,我在City Class上有一个自定义属性
public class City
{
[ColumnName("OtroID")]
public int CityID { get; set; }
[Required(ErrorMessage = "Please Specify a City Name")]
public string CityName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
该属性定义如此
[AttributeUsage(AttributeTargets.All)]
public class ColumnName : System.Attribute
{
public readonly string ColumnMapName;
public ColumnName(string _ColumnName)
{
this.ColumnMapName= _ColumnName;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试遍历属性[工作正常]然后循环遍历属性时,它只是忽略属性的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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我转到具有自定义属性的属性的即时窗口时,我可以这样做
?Property.GetCustomAttributes(true)[0]
Run Code Online (Sandbox Code Playgroud)
它会回来 ColumnMapName: "OtroID"
我似乎无法通过编程方式将其用于工作
我想这样做我相信:
PropertyInfo[] propCollection = type.GetProperties();
foreach (PropertyInfo property in propCollection)
{
foreach (var attribute in property.GetCustomAttributes(true))
{
if (attribute is ColumnName)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
应作者要求,从原始问题的评论中转发
只是出于兴趣 typeof(T) 中的 T 是什么?
在立即窗口中,您正在调用 Property.GetCustomAttribute(true)[0],但在 foreach 循环内,您正在对类型参数调用 GetCustomattributes。
这行:
System.Attribute[] attrs = System.Attribute.GetCustomAttributes(typeof(T));
Run Code Online (Sandbox Code Playgroud)
应该是这个
System.Attribute[] attrs = property.GetCustomAttributes(true);
Run Code Online (Sandbox Code Playgroud)
此致,
归档时间: |
|
查看次数: |
8579 次 |
最近记录: |