Surcharger l'operateur " ++ " pour une hashtable, comment ? [C#.NET] - C#/.NET managed - Programmation
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 ?
Marsh Posté le 06-06-2008 à 17:44:37
wat?
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
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.
Marsh Posté le 06-06-2008 à 18:35:07
comment j'incremente ma valeur dans maTable["indice"] alors ?
Le ++ me simplifierait bcp la vie
Marsh Posté le 06-06-2008 à 20:02:58
Tu es en .Net 2.0 ou supérieur?
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.
Marsh Posté le 06-06-2008 à 20:13:29
2.0
Sinon, jai pensé a faire une fonction a qui je donne une hashtable et une clef, et elle m'augmente la valeur associée
Marsh Posté le 06-06-2008 à 20:25:26
ParadoX a écrit : 2.0 |
T'es avec des object et tout ?
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
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 ?
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.
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
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
Sauf à être en 1.x, il n'y a aucune raison valable d'utiliser Collections plutôt que Collections.Generic
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 |
Pourquoi ref ? c'est déjà un objet ton Dictionary.
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 |
Et pour les arraylists ?
Taz a écrit : |
Histoire de pas le passer en copie
Marsh Posté le 06-06-2008 à 21:23:34
ParadoX a écrit : |
Bah List / IList
ParadoX a écrit : |
Tu passes une copie d'une "référence".
Marsh Posté le 06-06-2008 à 21:28:03
Reply
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
Syntaxe trouvée:
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
Message édité par ParadoX le 06-06-2008 à 17:35:58
---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt