Bonjour : j'aimerais contraindre qu'à la compilation, une constante ne soit appelé qu'une et une seul fois.
Est-ce quelque chose d'envisageable ?
Bonjour : j'aimerais contraindre qu'à la compilation, une constante ne soit appelé qu'une et une seul fois.
Est-ce quelque chose d'envisageable ?
Bonjour,
Tu as quoi comme impératif pour vouloir une telle chose ?
Pourquoi pas un compteur ? Pourquoi qu'une seule fois ?
En tout cas je serais surpris que cela soit faisable ! mais qui sait!
J@ck.
Bonjour,
Il faut nous donner d’avantages d'éléments concernant ta problématique car cela me semble particulièrement bizarre de vouloir accéder à une constante une seule fois lors de la compilation ?????![]()
Héhé :
Je m'attendais à ce genre de réponse.
Bon, il y a plusieurs cas ou ça me paraîtrais judicieux : certains sont directement lié à mon activité donc délicat, un autre à un défaut (ou de l'incompétence) lié à une librairie exotique utilisé...
Enfin, je vois un cas qui pourrais parler à tous :
Avoir un struct (ou un autre type) contenant une liste d'identifiant (typiquement du string ou du char[]) pour une appli web. Ces identifiants (réutilisé en javascript) doivent être unique dans l'ensemble de l'appli.
Les composants les utilisant peuvent se retrouver sur la même page de manière très aléatoire car l'utilisateur final compose son interface à sa convenance.
bref, ça peut donner des bugs difficile à reproduire.
L'idée était de prendre le mal à la source et éviter d'appeler l'identifiant plusieurs fois.
Une solution avec un test à l’exécution permettrait d'identifier le soucis mais après mise en prod donc bof.
Sinon, je sais qu'il est possible d'utiliser des identifiants uniques (uuid) ou d'utiliser une nomenclature de nommage (genre namespace) pour éviter la majorité des cas... mais tout ça me semble peut convainquant.
Ce qui me surprend, c'est que j'ai mis ça en place dans un autre langage (Rust : que j'utilise à titre perso pour étendre mes connaissances) sans difficulté particulière.
Il nous est difficile de comprendre ce que tu cherches a faire, tu expliques tres mal ton cas
Si je comprends bien, tu veux pouvoir disposer d'une liste d'identifiants sans doublons. C'est bien ca ?
Si oui, tu peux utiliser un HashSet ou un SortedSet si l'ordre est important, et si tu utilises .NET Framework >= 4.
Il y a aussi le type Dictionary qui permet de s'assurer qu'une cle (donc un identifiant dans ton cas) n'existe qu'une seule fois.
Si aucun de ces types ne correspond a ce que tu cherches, tu peux aussi implementer ta propre classe qui derive d'une liste et qui va controler qu'il n'y ait pas de doublon lorsqu'un element est ajoute.
Enfin, si cela ne correspond pas a ta recherche, explique-toi plus clairement et eventuellement poste un exemple concret.
Less Is More
Pensez à utiliser les boutons
,
et les balises code
Desole pour l'absence d'accents, clavier US oblige
Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.
C'est bien une liste d'identifiants sans doublons mais je veux faire ce test à la compilation.
Je connais les HashSet, SortedSet et les Dictionary et ça ne répond pas vraiment à la problématique.
Le s 3 pré-cités vont tester les doublons lors de l'ajout mais rien ne m'interdit d'appeler plusieurs fois la même clés à des endroits différents...
Si j'étais dans une problématique de test à l’exécution, je ferais sans doute quelque chose qui s'apparenterais à ça :
Seulement, j'aimerais faire ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 using System; using System.Collections.Generic; namespace test { public class Program { public class AppException : Exception { public AppException(String message) : base (message) {} public AppException(String message, Exception inner) : base(message,inner) {} } public class MonDic : Dictionary<int, string> { public string donne(int cle) { if (this.ContainsKey(cle)) { string valeur = this[cle]; this.Remove(cle); return valeur; } throw new AppException("Y'a un doublon d'id"); } } public static void Main(string[] args) { MonDic d = new MonDic(); d.Add(1, "un"); d.Add(2, "deux"); d.Add(3, "trois"); Console.WriteLine(d.donne(1)); Console.WriteLine(d.donne(1)); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 using System; namespace test { public class Program { public static class ListeID { public static string idRechercheComposantUn = "idUn"; // ... public static string idRechercheComposantMille = "idMille"; } public static void Main(string[] args) { // Dans l'appli Un Console.WriteLine(ListeID.idRechercheComposantUn); // Dans l'appli mille, le dev c'est paluché : il appelle l'id du composant mille // => ça marche dans ses tests car il n'a pas testé les 2 composants (Un et Mille) dans la même page ! Console.WriteLine(ListeID.idRechercheComposantUn); } } }
Partager