屬性,所以我有屬性的,從我的類的集合,我想通過循環。 對於每個屬性,我可能有自定義屬性,所以我想循環這些。 在這種特殊情況下,我有我的城市類的自定義屬性,因爲這樣C#自定義屬性從
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'。 – Heinzi
出於興趣,'typeof(T)'中的T是什麼?在即時窗口中,您調用Property.GetCustomAttribute(true)[0],但在foreach循環內您調用類型參數上的GetCustomattributes而不是 –
我沒有看到僅接受Type參數的Attribute.GetCustomAttributes()的重載。你確定你檢索屬性的行是正確的嗎? – JMarsch