2009-03-12 9 views
1

я создал хеш-таблицу двумерных массивов в 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; 

ответ

5

Hashtable не знает, какие объекты хранятся в нем; вы должны вручную бросить каждый один:

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

Вы должны использовать словарь вместо Hashtable, если это возможно:

var dict = new Dictionary<String, double[,]>(); 
double result = dict["foo"][4][5]; 
4
((double[,])hashLocAll[strReportLocationId])[iPNLLine, 0] += pnl_value; 

Почему вы не используете Словарь < string, double [,] >?

-2
  • Я не вижу каких-либо определений hashLocAll или strReportLocationId в вашей выборке код.
  • Вы используете не общий словарь. Вместо этого используйте общий словарь.
  • Вы используете стандартную версию венгерской нотации. Не делай этого. Избавьтесь от префиксов hash, str, i и т. Д. Они совершенно не нужны на языке C# и только затрудняют чтение кода.
+0

для точки (два, сделанные другими) совершенно бесполезных исключением. –

+0

Это действительно не помогает ответить на вопрос, и ваши последние два момента заставляют меня хотеть, чтобы вы могли удалять ответы как «субъективные и аргументированные». – Samuel

0

Итак, у вас есть хеш-таблица. Теперь вы хотите получить эту информацию.

Похоже, hashLoc Все должно быть hashLoc Один. Тем не менее, я предполагаю, что у вас есть причина для этого.

С hashtables, все внутри имеет тип «объект». Это означает, что вы должны делать много кастинга.

Попробуйте это:

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

Смежные вопросы