[C#.NET] Surcharger l'operateur " ++ " pour une hashtable, comment ?

Surcharger l'operateur " ++ " pour une hashtable, comment ? [C#.NET] - C#/.NET managed - Programmation

Marsh Posté le 06-06-2008 à 17:27:18    

Bonjour,
 
J'ai une hashtable qui contient des int, et j'aimerais pouvoir utiliser maTable["indice"] ++ au lieu d'un convert.ToInt32 moche et barbarre. J'ai donc essayé de surcharger l'operateur ++, mais je n'y parviens pas :sweat:  
 
Syntaxe trouvée:

Code :
  1. public static result-type operator unary-operator (op-type operand)


 
Mais ...
 
1 - Ou faut-il que je fasse ca ? Est-ce une modification de Int ou de Hashtable ?  
2 - Quel est le type de retour (s'il y en a un ?)
 
Toute aide est appréciée :jap:
 
 


Message édité par ParadoX le 06-06-2008 à 17:35:58

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 17:27:18   

Reply

Marsh Posté le 06-06-2008 à 17:37:36    

En fait le probleme vient du fait que ni HashTable ni Int ne sont pas des classes que j'ai definies moi-meme. Ne sont-elles pas Sealed, les protegeant de toutes modifications ?


Message édité par ParadoX le 06-06-2008 à 17:46:03

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 17:44:37    

wat?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-06-2008 à 17:47:31    

Hm ? :??:  
 
Dans tous les examples que je trouve, ils overloadent " ++ ", mais seulement pour des types qu'ils ont crées eux-meme, style "Complex" ou "Vector":
 
http://www.blackwasp.co.uk/CSharpO [...] ading.aspx
http://www.dotnetjohn.com/articles.aspx?articleid=269
 
Alors que moi, je veux appliquer un ++ a une hashtable :sweat:  


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 17:54:00    

Oui mais non, tu pars de prémices complètement fuckées, ya aucune raison d'overloader "++" dans le cas qui t'intéresse, et l'overloader sur "Hashtable" ne t'apportera de toute façon strictement rien puisque ça ne résoudrait pas le problème.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-06-2008 à 18:35:07    

comment j'incremente ma valeur dans maTable["indice"] alors ? [:spamafote]
Le ++ me simplifierait bcp la vie :jap:


Message édité par ParadoX le 06-06-2008 à 18:35:28

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 20:02:58    

Tu es en .Net 2.0 ou supérieur?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-06-2008 à 20:12:54    

c'est pas spécifique à ton Dictionary<Key, Value>. La property Item retourne un Value. S'il a un ++ c'est bien sauf que si c'est un valuetype ou un truc boxé qui t'es renvoyé, bah tu inc sur une copie.

Reply

Marsh Posté le 06-06-2008 à 20:13:29    

2.0 :jap:

 

Sinon, jai pensé a faire une fonction a qui je donne une hashtable et une clef, et elle m'augmente la valeur associée [:spamafote]

Message cité 1 fois
Message édité par ParadoX le 06-06-2008 à 20:15:47

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 20:18:49    

donne nous un exemple quoi.

Reply

Marsh Posté le 06-06-2008 à 20:18:49   

Reply

Marsh Posté le 06-06-2008 à 20:25:26    

ParadoX a écrit :

2.0 :jap:
 
Sinon, jai pensé a faire une fonction a qui je donne une hashtable et une clef, et elle m'augmente la valeur associée [:spamafote]


T'es avec des object et tout ?

Reply

Marsh Posté le 06-06-2008 à 20:25:46    

Taz a écrit :

c'est pas spécifique à ton Dictionary<Key, Value>. La property Item retourne un Value. S'il a un ++ c'est bien sauf que si c'est un valuetype ou un truc boxé qui t'es renvoyé, bah tu inc sur une copie.


Il parle d'une hashtable, donc je présume qu'il utilise le conteneur HashTable non typé de Collections, au lieu du Dictionary de Collections.Generics


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-06-2008 à 20:25:55    

C'est tout con. J'ai une hashtable qui contient plusieurs ints, qui font office de compteurs. 17 en tout. Donc avant j'avais une table de int, mais "maTable[8]" n'est pas tres parlant quant a son contenu. Alors je me suis dit que je vais passer a une hashtable, de cette maniere j'aurais des indices parlants, et j'aurais plus trop besoin de me soucier de l'ordre et du nom des indices.

 

Alors je passe de int[] maTable de 0 a 16 a une Hashtable avec "unIndice", [...], "unAutreIndice". Avant, pour incrementer un compteur, un maTable[i]++ suffisait, chose qui ne marche plus avec une Hashtable, auquel cas je dois faire

 

maTable["unIndice"] =  = Convert.ToInt32(maTable["unIndice"]) + 1;

 

ce qui est absolument lourd et moche. Tu vois ce que je veux dire ?

 



Message édité par ParadoX le 06-06-2008 à 20:26:54

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 20:33:09    

ok. Avec les generics, quand tu fais un h[key]++, en fait ça fait un get_Item(), ensuite ça l'incrémente, et ça termine par un set_Item.

 

En 1.0, t'as que des object. D'ou ton Convert ignoble et inutile. Donc tu peux pas. T'es obligé de toi même: déboxer l'int avec un cast, faire ton ++, et reboxer implicitement en h[key] = ton_int. C'est chiant, mais ça restera toujours plus performant que ton convert.


Message édité par Taz le 06-06-2008 à 20:34:32
Reply

Marsh Posté le 06-06-2008 à 20:35:00    

Bon du coup j'ai fait une fonction static ailleurs qui prends comme parametre une hashtable en reference ainsi qu'une clef, et ca incremente sa valeur [:spamafote]


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 20:39:46    

Remplace ton Collections.HashTable par un Collections.Generic.Dictionary, et renseigne toi sur les generics, s'il te plait [:pingouino]
 
Sauf à être en 1.x, il n'y a aucune raison valable d'utiliser Collections plutôt que Collections.Generic

Message cité 1 fois
Message édité par masklinn le 06-06-2008 à 20:41:24

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-06-2008 à 20:42:10    

ParadoX a écrit :

Bon du coup j'ai fait une fonction static ailleurs qui prends comme parametre une hashtable en reference ainsi qu'une clef, et ca incremente sa valeur [:spamafote]


Pourquoi ref ? c'est déjà un objet ton Dictionary.

Reply

Marsh Posté le 06-06-2008 à 21:11:34    

masklinn a écrit :

Remplace ton Collections.HashTable par un Collections.Generic.Dictionary, et renseigne toi sur les generics, s'il te plait [:pingouino]
 
Sauf à être en 1.x, il n'y a aucune raison valable d'utiliser Collections plutôt que Collections.Generic


 
:jap:
 
Et pour les arraylists ?
 

Taz a écrit :


Pourquoi ref ? c'est déjà un objet ton Dictionary.


 
Histoire de pas le passer en copie [:spamafote]


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 06-06-2008 à 21:23:34    

ParadoX a écrit :


 
:jap:
 
Et pour les arraylists ?
 


 
Bah List / IList
 

ParadoX a écrit :


 
Histoire de pas le passer en copie [:spamafote]


Tu passes une copie d'une "référence".

Reply

Marsh Posté le 06-06-2008 à 21:28:03    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed