2009-09-30 7 views
0

Je vois le code comme le suivant dans plusieurs livres et exemples en ligne. Le problème est qu'ils alimentent tous en une seule méthode dans un objet dictionnaire qui en nécessite deux.IDictionary et Connection.RetrieveStatistics .NET/C#

IDictionary statistics = connection.RetrieveStatistics(); 

qui renvoie l'erreur IDE:

Error 1 Using the generic `type 'System.Collections.Generic.IDictionary<TKey,TValue>' requires '2' type arguments C:\Users\SGM7\Documents\ASPX 3_5 book code\Pro ASP.NET 3.5\Chapter07\Website\Tester.aspx.cs 22 9 C:\...\Website\` 

Ainsi, même si connection.RetrieveStatistics() retourne paires, comment puis-je IDictionary d'accepter connection.RetrieveStatistics()?

Voici le bloc de code.

connection.Open(); 
connection.StatisticsEnabled = true; 

IDictionary statistics = connection.RetrieveStatistics(); 

lblBytes.Text = "Received bytes: " + statistics["BytesReceived"].toString(); 
connection.Close(); 
lblBytes.Text += connection.State.ToString(); 
+0

Mis à part le "t" minuscule dans "toString", votre code compile et fonctionne bien pour moi (une fois que je déclare et initialise "connexion"). Pouvez-vous ajouter plus de code? –

Répondre

3

Faites un clic droit sur RetrieveStatistics dans votre bloc de code dans VS et choisissez « aller à la définition » pour voir comment il est défini. Ma conjecture est que c'est un System.Collections.IDictionary, pas un System.Collections.Generic.IDictionary < K, V >.

Ou, si vous utilisez .NET 3.5 ou plus, l'utilisation var:

var statistics = connection.RetrieveStatistics(); 
+1

Ah oui! Si je supprime le "using System.Collections" j'obtiens la même erreur de compilation qu'il décrit. Un bon! –

+0

Merci. Imaginé que ça devait être quelque chose de simple, sinon pourquoi y aurait-il autant d'exemples utilisant ce code? Je viens de le qualifier complètement et ça a fonctionné. – user179700

1

L'erreur de compilation fait, il semble que vous essayez d'utiliser un dictionnaire générique au lieu d'un dictionnaire non générique .

Le type de retour de RetrieveStatistics() est IDictionary, pas IDictionary<T,K>

Avez-vous une déclaration à l'aide qui est la cartographie IDictionary à autre chose? Avez-vous essayé d'utiliser System.Collections.IDictionary explicitement?

Par exemple:

System.Collections.IDictionary statistics = connection.RetrieveStatistics(); 

Comme le dit Jonathan, var travaillera également, parce que le compilateur juste à comprendre ce type doit être.

Questions connexes