2009-09-30 52 views
0

我在几本书和示例中看到如下代码。问题在于,它们都将单一方法输入到需要两个字典的字典对象中。IDictionary和Connection.RetrieveStatistics .NET/C#

IDictionary statistics = connection.RetrieveStatistics(); 

它返回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\` 

因此,即使connection.RetrieveStatistics()返回对,我怎么能得到的IDictionary接受connection.RetrieveStatistics()?

这里是代码块。在VS代码块RetrieveStatistics

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

IDictionary statistics = connection.RetrieveStatistics(); 

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

除了“toString”中的小写字母“t”,您的代码编译并运行正常(我声明并初始化“连接”后)。你能添加更多的代码吗? – 2009-09-30 23:02:34

回答

3

右击并选择“转到定义”,看看它是如何定义的。我的猜测是它是一个System.Collections.IDictionary,而不是System.Collections.Generic.IDictionary < K,V >。

或者,如果你使用.NET 3.5或更高版本,使用VAR:

var statistics = connection.RetrieveStatistics(); 
+1

啊是的!如果我删除了“using System.Collections”,我得到了他描述的相同的编译错误。好的! – 2009-09-30 23:09:53

+0

谢谢。认为它必须是简单的,否则为什么会有这么多的例子使用该代码。我只是完全符合条件,它跑了。 – user179700 2009-10-01 00:25:45

1

编译错误使得它看起来像你想使用的,而不是一个非通用词典通用词典。

RetrieveStatistics()返回类型IDictionary,不IDictionary<T,K>

你有一个使用声明的映射IDictionary别的东西?您是否尝试明确使用System.Collections.IDictionary

例如:

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

乔纳森说,var也将工作,因为编译器将只找出类型应该是什么。