c#访问二维数组的哈希表

时间:2009-03-12 13:08:53

标签: c#

我在c#中创建了二维数组的哈希表,并且无法弄清楚如何直接访问数组值,以下是我当前的代码:

// create the hashtable
Hashtable hashLocOne = new Hashtable();

// add to the hashtable if we don't yet have this location
if (!hashLocOne.ContainsKey(strCurrentLocationId))
  hashLocOne.Add(strCurrentLocationId,new double[20, 2] { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } });

// add to the value at a given array position, this does not work
hashLocAll[strReportLocationId][iPNLLine, 0] += pnl_value;

4 个答案:

答案 0 :(得分:5)

Hashtable不知道它中存储了哪种对象;你必须手动施放每一个:

double result = ((double[,]) table["foo"])[4][5];

如果可能,您应该使用Dictionary而不是Hashtable:

var dict = new Dictionary<String, double[,]>();
double result = dict["foo"][4][5];

答案 1 :(得分:4)

((double[,])hashLocAll[strReportLocationId])[iPNLLine, 0] += pnl_value;

为什么不使用Dictionary&lt; string,double [,]&gt; ?

答案 2 :(得分:0)

所以,你有一个哈希表。您现在想了解这些信息。

看起来像hashLoc 所有应该是hashLoc 一个。但是,我猜你有理由这样做。

使用哈希表,里面的所有内容都是“对象”类型。这意味着你必须做很多演员。

试试这个:

((double[,])hashLocOne[strReportLocationId])[iPNLLine, 0] += pnl_value;

((double[,])hashLocOne[strReportLocationId])[iPNLLine, 0] += pnl_value;

答案 3 :(得分:-2)

  • 我在示例代码中没有看到hashLocAllstrReportLocationId的任何定义。
  • 您正在使用非通用字典。改为使用通用字典。
  • 您使用的是匈牙利表示法的混合版本。不要那样做。摆脱前缀hashstri等。在C#等语言中完全没有这些前缀,只会让您的代码更难以阅读。