Comment accéder à la propriété count d'un type dynamique en C # 4.0?
J'ai du suivre une méthode qui retourne un objet dynamique qui représente une IEnumerable<'a>
('a=type anonyme) :
public dynamic GetReportFilesbyStoreProductID(int StoreProductID)
{
Report report = this.repository.GetReportByStoreProductID(StoreProductID);
if (report == null || report.ReportFiles == null)
{
return null;
}
var query = from x in report.ReportFiles
orderby x.DisplayOrder
select new { ID = x.RptFileID, Description = x.LinkDescription, File = x.LinkPath, GroupDescription = x.ReportFileGroup.Description };
return query;
}
Je veux être en mesure d'accéder à la Count
la propriété de ce IEnumerable
type anonyme. J'essaye d'accéder à la méthode ci-dessus en utilisant le code suivant et c'est un échec:
dynamic Segments = Top20Controller.GetReportFilesbyStoreProductID(StoreProductID");
if (Segments.Count == 0) //<== Fails because object doesn't contain count.
{
...
}
- Comment
dynamic
mot clé fonctionne? - Comment puis-je accéder à la
Count
propriété de laIEnumerable
type anonyme? - Est-il une manière que je peux utiliser ce type anonyme ou dois-je créer un objet personnalisé afin que je puisse passer à une fortement typées
IEnumerable<myObject>
au lieu dedynamic
?
Je préfère ne pas le faire si je peut que cette méthode n'est appelée que dans un seul endroit et de la création d'un jeter de l'objet semble exagéré.
source d'informationauteur Rodney
Vous devez vous connecter pour publier un commentaire.
La
IEnumerable<T>
qui est retourné par cette méthode n'a pas unCount
bien, donc je ne sais pas de quoi vous parlez. Peut-être que vous avez oublié d'écrireToList()
sur la fin de réification dans une liste, ou que vous vouliez appeler leCount()
méthode surIEnumerable<T>
?Vous aurez besoin d'appeler explicitement Énumérable.Count().
Voir Extension de la méthode et de l'objet dynamique en c# pour une discussion des raisons pour lesquelles les méthodes d'extension ne sont pas pris en charge par typage dynamique.
(Le "d" préfixe est juste pour l'exemple de code s'il vous plaît ne pas utiliser la notation hongroise!)
Mise à jour: Personnellement, j'irais avec @Magnus réponse de l'aide
if (!Segments.Any())
et retourIEnumerable<dynamic>
.Count()
doit énumérer à la collection complète, vous voulez probablement:Et votre fonction doit retourner
IEnumerable<object>
au lieu de dynamiqueEssayer le Linq compter
using System.Linq;
Segments.Count()