2010-04-15 3 views
2

j'ai un objet client avec une collection de CustomerContactsréflexion .NET - obtenir le premier élément d'une collection réfléchie sans coulée à la collecte spécifique

IEnumerable<CustomerContact> Contacts { get; set; } 

Dans un autre code que je suis en utilisant la réflexion et ont le PropertyInfo des contacts propriété

var contacts = propertyInfo.GetValue(customerObject, null); 

Je sais contacts a au moins un objet, mais comment puis-je sortir? Je ne veux pas le lancer sur IEnumerable<CustomerContact> car je veux garder ma méthode de réflexion dynamique. J'ai pensé à appeler FirstOrDefault() par réflexion - mais je ne peux pas le faire facilement car c'est une méthode d'extension.

Quelqu'un a-t-il des idées?

+4

Vous devriez jeter. – SLaks

+0

Comme je l'ai mentionné dans la question, je dois garder la méthode de réflexion dynamique. J'ai réduit le code pour montrer juste le problème, si vous l'avez vu dans le contexte je doute que vous suggériez cela. –

Répondre

8

Si vous voulez vraiment éviter de mentionner CustomerContact dans votre code, vous pouvez le faire:

IEnumerable items = (IEnumerable)propertyInfo.GetValue(customerObject, null); 

object first = items.Cast<object>().FirstOrDefault(); 
+0

C'est plus agréable que le mien ... –

+0

Merci, juste ce dont j'avais besoin. –

Questions connexes