J'ai un problème avec un code C # que j'écris, je suis assez nouveau à C # et j'ai regardé autour de vous et je ne trouve pas de solution.
J'ai une méthode qui renvoie un dictionnaire, j'ai défini le type de retour à l'objet et il semble bien. p> Le problème est dans la méthode principale Où j'essaie de boucler à travers les éléments renvoyés du dictionnaire. p> Je reçois une erreur disant "Erreur 2 foreach Instruction ne peut pas fonctionner sur des variables d'objet de type" "Parce que" objet "ne contient pas de définition publique pour" getenumerator "" p> est-ce parce que je ne spécifie pas le type de retour correct pour un dictionnaire? Ou existe-t-il une autre façon d'itération à travers les entrées de l'objet retourné? P> Merci pour votre aide,
Stephen. P> p>
8 Réponses :
y a-t-il une raison pour laquelle vous ne pouvez pas avoir la signature de votre méthode ci-dessous? Retourne toujours toujours un dictionnaire avec un type de clé de chaîne et un type de données de chaîne?
public Dictionary<string, string> loopThroughNotificationCountQueries()
public IDictionary<string, string> loopThroughNotificationCountQueries() { var countQuery = new Dictionary<string, string>(); ... ... return countQuery; }
Regardez votre déclaration de méthode:
// Note case change as well to follow .NET naming conventions public IDictionary<string, string> LoopThroughNotificationCountQueries()
Merci pour votre aide, comme je l'ai dit que je suis nouveau à C # et je ne savais pas que les méthodes pourraient être déclarées comme un dictionnaire.
Utilisez
public Dictionary<string, string> loopThroughNotificationCountQueries() { ... }
@Vlad - quel modificateur d'accès? Voulez-vous dire le type de retour?
@ODed modificateurs d'accès
@Vlad - Je sais quels sont les modificateurs d'accès. Je ne comprends tout simplement pas pourquoi vous pensez qu'ils sont pertinents pour la réponse.
Le cahicotement public serait mieux. (au lieu du dictionnaire)
@ODED Certes, pas très stackoverflowy de moi, mais j'ai trouvé la faute de frappe de Henk. La réponse est également valable, alors je me tiens à mon +1.
@Vlad - n'a pas repéré la faute de frappe. Bonne chose que je pouvais voir la modification;)
Oui c'est parce que vous ne spécifiez pas le type de retour. p>
Deux possibilités: p>
meilleur: strong> Vous spécifiez le type de retour au dictionnaire P>
le pire: strong> Vous lancez l'objet à un dictionnaire de la méthode d'appel p>
Il spécifie un type de retour - objet code>.
ha ha. comme j'écris dans l'abstrait d'un livre: "c'est un livre" oui c'est correct
Si voici ne pas spécifier de type de retour, il aurait utilisé void code>.
Le vide signifierait que la déclaration de méthode n'a pas de type de retour. Mais celui-ci en a un. C'est juste non spécifié correctement. ;-)
Votre LooppTHRoughNotificationCountQuise code> retourne
objet code>. Effectuez son retour
Dictionnaire
Oui, c'est supposé être:
public IDictionary<string, string> loopThroughNotificationCountQueries() { }
Vous ne devez pas retourner un dictionnaire dans une méthode non privée, il expexent le type et toutes les méthodes et propriétés, si vous n'en avez pas besoin, et que vous ne devriez pas dans la plupart des cas, ne le faites pas. Allumez FXCop et il vous tiendra à vous de faire cela
beaucoup de façons autour de cela, les chances de vous voulez faire de Someclass.SomeDictionary.Ajouter ("nom", "valeur") sont petites, les chances de ce être Une implémentation sensible est proche inexistante. P>
En général, j'ai simplement ma classe d'avoir un membre privé de type dictionnaire et expose quelques méthodes
par exemple p> etc. p> Si je le fais beaucoup, déléguez-vous à une simple classe et de porter cela. P> p>