2009-11-11 7 views
1

Как я могу получить строковое значение из хеш-таблицы без вызова метода toString()?Hashtable как получить строковое значение без toString()

пример: мой класс:

public class myHashT : Hashtable 
{ 
public myHashT() { } 
... 
public override object this[object key] 
     { 
     get 
     { 
      return base[key].ToString(); <--this doesn't work! 
     } 
     set 
     { 
      base[key] = value; 
     } 
     } 
} 

В другом классе:

myHashT hT; 
string test = hT["someKey"]; 

он работает с hT["someKey"].toString();, но мне это нужно, не вызывая ToString() и без приведения к (строки).

+0

Что вы имеете в виду, что не работает? Ошибка компиляции? Если вы возвращаете объект, зачем вам ToString()? base [key] даст вам объект. –

ответ

0

Вы можете использовать System.Collections.Generic.HashSet. Альтернативно используйте композицию вместо наследования, т.е. hashtable будет вашим частным полем и напишите свой собственный индекс, который делает ToString().

public class myHashT 
{ 
public myHashT() { } 
... 

private Hashtable _ht; 

public string this[object key] 
{ 
    get 
    { 
    return _ht[key].ToString(); 
    } 
    set 
    { 
    _ht[key] = value; 
    } 
} 

}

0

Если я правильно понимаю, значение в хеш-таблице является строкой?

Если это так, вам нужно передать объект в виде строки.

string test = (string)hT["someKey"]; 
1

Можете ли вы просто бросить?

(string)hT["someKey"] 

Обратите внимание, что, если это 2,0 или выше, общий Dictionary<string,string> будет гораздо проще ... и в 1,1 StringDictionary будет делать работу (хотя IIRC вам нужно следить за прецедентным нечувствительности в ключе).

+0

как насчет скорости чтения? – Jooj

+0

Это будет примерно то же самое; O (1) –

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