2010-11-12 3 views
3

J'ai une classe avec un certain nombre d'attributs, et j'ai besoin de trouver un moyen d'obtenir un compte du nombre d'attributs dont il dispose. Je veux faire cela parce que la classe lit un fichier CSV, et si le nombre d'attributs (csvcolumns) est inférieur au nombre de colonnes dans le fichier, des choses spéciales devront se produire. Voici un échantillon de ce que ma classe ressemble à:Comment obtenir le nombre d'attributs d'un objet?

public class StaffRosterEntry : RosterEntry 
    { 
     [CsvColumn(FieldIndex = 0, Name = "Role")] 
     public string Role { get; set; } 

     [CsvColumn(FieldIndex = 1, Name = "SchoolID")] 
     public string SchoolID { get; set; } 

     [CsvColumn(FieldIndex = 2, Name = "StaffID")] 
     public string StaffID { get; set; } 
    } 

J'ai essayé de le faire:

var a = Attribute.GetCustomAttributes(typeof(StaffRosterEntry)); 
var attributeCount = a.Count(); 

Mais cela a échoué lamentablement. Toute aide que vous pourriez donner (liens vers des documents, ou d'autres réponses, ou simplement des suggestions) est grandement appréciée!

Répondre

7

Étant donné que les attributs sont des propriétés, vous devez obtenir les attributs de chaque propriété:

Type type = typeof(StaffRosterEntry); 
int attributeCount = 0; 
foreach(PropertyInfo property in type.GetProperties()) 
{ 
attributeCount += property.GetCustomAttributes(false).Length; 
} 
0

Ceci est non testé et juste à côté du haut de ma tête

System.Reflection.MemberInfo info = typeof(StaffRosterEntry); 
object[] attributes = info.GetCustomAttributes(true); 
var attributeCount = attributes.Count(); 
0

aide de la réflexion que vous avez une méthode GetAttributes() qui retourne un tableau d'objet (attributs). Par conséquent, si vous avez une instance de l'objet, obtenez le type en utilisant obj.GetType(), puis vous pouvez utiliser la méthode GetAttributes().

8

S'il vous plaît utilisez le code suivant:

Type type = typeof(YourClassName); 
int NumberOfRecords = type.GetProperties().Length; 
+0

simple et intelligent. +1 – EAmez

Questions connexes