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

c#访问二维数组的哈希表,c#,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(strCurrentLoc

我已经在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;
你为什么不用字典


为什么不使用字典?

哈希表不知道其中存储了什么类型的对象;您必须手动强制转换每一个:

double result = ((double[,]) table["foo"])[4][5];
如果可能,您应该使用字典而不是哈希表:

var dict = new Dictionary<String, double[,]>();
double result = dict["foo"][4][5];
var dict=newdictionary();
双结果=dict[“foo”][4][5];

哈希表不知道存储了什么类型的对象;您必须手动强制转换每一个:

double result = ((double[,]) table["foo"])[4][5];
如果可能,您应该使用字典而不是哈希表:

var dict = new Dictionary<String, double[,]>();
double result = dict["foo"][4][5];
var dict=newdictionary();
双结果=dict[“foo”][4][5];
  • 我在示例代码中没有看到任何关于
    hashLocAll
    strReportLocationId
    的定义
  • 您正在使用非通用词典。改用通用词典
  • 您使用的是一种非标准化的匈牙利符号。不要那样做。去掉前缀
    hash
    str
    i
    等。它们在C#这样的语言中是完全不必要的,只会使代码更难阅读
      • 我在示例代码中没有看到任何关于
        hashLocAll
        strReportLocationId
        的定义
      • 您正在使用非通用词典。改用通用词典
      • 您使用的是一种非标准化的匈牙利符号。不要那样做。去掉前缀
        hash
        str
        i
        等。它们在C#这样的语言中是完全不必要的,只会使代码更难阅读

        • 所以,您有一个哈希表。你现在想要得到这些信息

          看起来hashLocAll应该是hashLocOne。不过,我猜你是有原因的

          对于哈希表,其中的所有内容都是“object”类型。这意味着你必须做大量的铸造

          试试这个:

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

          因此,您有一个哈希表。你现在想要得到这些信息

          看起来hashLocAll应该是hashLocOne。不过,我猜你是有原因的

          对于哈希表,其中的所有内容都是“object”类型。这意味着你必须做大量的铸造

          试试这个:

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

          这确实无助于回答问题,你的最后两点让我希望你能删除“主观和辩论”的答案。这确实无助于回答问题,你的最后两点让我希望你能删除“主观和辩论”的答案。