2009-11-11 6 views
1

Comment puis-je obtenir la valeur de chaîne à partir d'une table de hachage sans appeler la méthode toString()?Hashtable comment obtenir la valeur de chaîne sans toString()

exemple: ma classe:

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; 
     } 
     } 
} 

Dans une autre classe:

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

cela fonctionne avec hT["someKey"].toString(); mais je besoin sans appeler ToString() et sans jeter à (string).

+0

Que voulez-vous dire cela ne fonctionne pas? Compiler l'erreur? Si vous renvoyez un objet, pourquoi avez-vous besoin de ToString()? base [clé] vous donnera un objet. –

Répondre

0

Vous pouvez utiliser System.Collections.Generic.HashSet. Alternativement utiliser la composition au lieu de l'héritage à savoir. avoir hashtable être votre domaine privé et écrire votre propre indexeur qui fait ToString().

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

private Hashtable _ht; 

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

}

0

Si je comprends bien, la valeur dans la hashtable est une chaîne?

Si tel est le cas, vous devez transformer l'objet en chaîne.

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

Pouvez-vous lancer?

(string)hT["someKey"] 

Notez que si cela est de 2,0 ou au-dessus, un Dictionary<string,string> générique serait beaucoup plus simple ... et 1.1 StringDictionary ferait le travail (bien que IIRC vous devez surveiller insensibilité à la casse dans la clé).

+0

qu'en est-il de la vitesse de lecture? – Jooj

+0

Ce sera à peu près la même chose; O (1) –

Questions connexes