7
votes

C # Type de retour Dictionnaire

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. xxx

Le problème est dans la méthode principale Où j'essaie de boucler à travers les éléments renvoyés du dictionnaire. xxx

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 ""

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é?

Merci pour votre aide, Stephen.


0 commentaires

8 Réponses :


2
votes

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() 


0 commentaires

4
votes
public IDictionary<string, string> loopThroughNotificationCountQueries()
    {
        var countQuery = new Dictionary<string, string>(); ...


        ... return countQuery;
    }

0 commentaires

13
votes

Regardez votre déclaration de méthode:

// Note case change as well to follow .NET naming conventions
public IDictionary<string, string> LoopThroughNotificationCountQueries()


1 commentaires

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.



9
votes

Utilisez

public Dictionary<string, string> loopThroughNotificationCountQueries() { ... }


6 commentaires

@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;)



0
votes

Oui c'est parce que vous ne spécifiez pas le type de retour.

Deux possibilités:

meilleur: Vous spécifiez le type de retour au dictionnaire

le pire: Vous lancez l'objet à un dictionnaire de la méthode d'appel


4 commentaires

Il spécifie un type de retour - objet .


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 .


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. ;-)



1
votes

Votre LooppTHRoughNotificationCountQuise retourne objet . Effectuez son retour Dictionnaire en modifiant sa signature. XXX


0 commentaires

1
votes

Oui, c'est supposé être:

public IDictionary<string, string> loopThroughNotificationCountQueries()
{
}


0 commentaires

0
votes

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.

En général, j'ai simplement ma classe d'avoir un membre privé de type dictionnaire et expose quelques méthodes par exemple xxx

etc.

Si je le fais beaucoup, déléguez-vous à une simple classe et de porter cela.


0 commentaires