我在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;
答案 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)
hashLocAll
或strReportLocationId
的任何定义。hash
,str
,i
等。在C#等语言中完全没有这些前缀,只会让您的代码更难以阅读。