2012-03-05 3 views
1

Y a-t-il un moyen d'écrire du code pour cela:Création d'une méthode pour parcourir les propriétés des objets

Foreach property in MyObject; Vérifie si la propriété a un validateur DataMember avec IsRequired = true;

[DataMember(Order = 2, IsRequired=true)] 
public string AddressLine1 { get; set; } 

[DataMember(Order = 3)] 
public string AddressLine2 { get; set; } 

Si c'est le cas, vérifiez si l'objet possède une valeur notNull ou vide;

Donc, en résumé, je crée une méthode appelée CheckForRequiredFields (objet o)

passe en fait un objet « Adresse » dans ce cas avec des propriétés énumérées ci-dessus. Le code Voit la première propriété a RequiredField = true donc il vérifie que l'objet Address qui lui est passé a une valeur pour AddressLine1

+1

Est-ce que vous connaissez .NET a déjà un ensemble de classes qui offrent cette fonctionnalité dans l'espace de noms DataAnnotations? http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.aspx –

Répondre

1

Quelque chose comme (de la mémoire donc aucune garantie d'exactitude):

foreach(var propInfo in o.GetType().GetProperties()) 
{ 
    var dmAttr = propInfo.GetCustomAttributes(typeof(DataMemberAttribute), false).FirstOrDefault() as DataMemberAttribute; 
    if (dmAttr == null) 
     continue; 

    object propValue = propInfo.GetValue(o, null); 
    if (dmAttr.IsRequired && propValue == null) 
     // It is required but does not have a value... do something about it here 
} 
+0

Merci à peu près travaillé avec un peu de peaufinage –

1

Oui, il y a. Jetez un oeil à Reflection. Vous pouvez prendre votre type, appelez le Type.GetProperties() dessus et récupérez PropertyInfo pour chaque propriété.

Depuis le PropertyInfo vous pouvez obtenir ses attributs (en utilisant la méthode GetCustomAttributes), et rechercher l'attribut DataMember. Si vous en trouvez un, vérifiez son IsRequired.

+0

La propriété 'Attributes' ne leur dira pas si la propriété est décorée avec des attributs personnalisés (c'est ce que' GetCustomAttributes' est pour). –

+0

Corrigé. Merci. – zmbq

Questions connexes