IDictionary和Connection.RetrieveStatistics .NET / C#

时间:2009-09-30 22:57:35

标签: c# .net

我在网上的几本书和例子中看到如下代码。问题是它们都将单个方法输入到需要两个字典对象的字典对象中。

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

这是代码块。

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

IDictionary statistics = connection.RetrieveStatistics();

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

2 个答案:

答案 0 :(得分:3)

右键单击VS中代码块中的RetrieveStatistics,然后选择“转到定义”以查看其定义方式。我的猜测是它是System.Collections.IDictionary,而不是System.Collections.Generic.IDictionary&lt; K,V&gt;。

或者,如果您使用的是.NET 3.5或更高版本,请使用var:

var statistics = connection.RetrieveStatistics();

答案 1 :(得分:1)

编译错误使您看起来像是在尝试使用通用字典而不是非通用字典。

RetrieveStatistics()的返回类型为IDictionary,而不是IDictionary<T,K>

你有使用声明将IDictionary映射到其他地方吗?您是否尝试过明确使用System.Collections.IDictionary

例如:

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

正如Jonathan所说,var也会起作用,因为编译器只会弄清楚应该是什么类型。