, así que tengo una colección de Propiedades de mi clase en la que quiero pasar. Para cada propiedad, puedo tener atributos personalizados, así que quiero recorrerlos. En este caso particular que tienen un atributo personalizado en mi clase de la ciudad como talC# Atributos personalizados de las Propiedades
public class City
{
[ColumnName("OtroID")]
public int CityID { get; set; }
[Required(ErrorMessage = "Please Specify a City Name")]
public string CityName { get; set; }
}
El atributo se define como tal
[AttributeUsage(AttributeTargets.All)]
public class ColumnName : System.Attribute
{
public readonly string ColumnMapName;
public ColumnName(string _ColumnName)
{
this.ColumnMapName= _ColumnName;
}
}
Cuando trato de bucle a través de las propiedades [que funciona muy bien] y luego recorre los atributos simplemente ignora el ciclo for para el atributo y no devuelve nada.
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);
}
}
}
Cuando voy a la ventana inmediata para la propiedad que tiene un atributo personalizado que pueda hacer
?Property.GetCustomAttributes(true)[0]
Se volverá ColumnMapName: "OtroID"
Me parece que no puede adaptarse a este trabajo programáticamente aunque
Como nota al margen: Por convención, la clase de atributo debe ser llamado 'ColumnNameAttribute'. – Heinzi
Apenas por interés, ¿qué es 'T' en' typeof (T) '? En la ventana inmediata está llamando a Property.GetCustomAttribute (true) [0] pero dentro del bucle foreach está llamando a GetCustomattributes en un parámetro de tipo en su lugar –
No veo una sobrecarga de Attribute.GetCustomAttributes() que acepte solo un parámetro Type.¿Estás seguro de que la línea donde recuperas los atributos es la correcta? – JMarsch