dans ce cas là l'enum est faite pour ça mais qu'elle est le meilleur moyen pour énuméré des strings ?
dans ce cas là l'enum est faite pour ça mais qu'elle est le meilleur moyen pour énuméré des strings ?
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Ben l'Enum c fait pour ça, c'est juste qu'il faut utiliser les méthodes static d'Enum pour manipuler sa face "String".
non je parlais pas de cette méthode mais plutôt de ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public enum TypeCategorie { Secteur="Secteur", Complexe="Complexe" }
Oui mais on a dit que ca, c'était pas possible! Un enum c'est un entier point final. Qu'est ce que ca change pour toi que derriere ca soit un string, un int ou un guid?
Retrouvez moi sur :
Mon Espace Developpez.com-------------------------------
Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code----------------------------
Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
je sais très bien que c'est impossible c'est pour ça que je suis partie sur le struct pour pouvoir faire directement
finalement je suis partie sur ça (qu'est ce qu'on peut s'emmerder sur des trucs aussi simple):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Exploitation test=new Exploitation(); test.Categorie = Exploitation.TypeCategorie.Complexe;
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 public class Exploitation : ObjetDomaine { public enum TypeCategorie { Secteur, Complexe } private string _categorie; public string Identifiant { get; set; } public string Parent_id { get; set; } public string Libelle { get; set; } public string Categorie { get { if (IsTypeCategorie(_categorie)) return _categorie; else throw new Exception("La catégorie d'exploitation est incorrecte ou ne contient aucun élément"); } set { if (IsTypeCategorie(value)) _categorie = value; else throw new Exception("La catégorie d'exploitation est incorrecte: elle doit correspondre a secteur, complexe..."); } } private bool IsTypeCategorie(string value) { if (Enum.GetNames(typeof(TypeCategorie)).Contains(value)) return true; else return false; } public Exploitation() { } }
Ah ben la du coup, t'as loupé le message de tomlev:
peut se remplacer par:
Code : Sélectionner tout - Visualiser dans une fenêtre à part IsTypeCategorie(_categorie)
Mais cela dit, je vois toujours pas pourquoi tu te trimballes des strings:
Code : Sélectionner tout - Visualiser dans une fenêtre à part Enum.IsDefined(typeof(TypeCategorie), _categorie));
Ca marche très bien! Si tu veux l'afficher dans un GUI WPF ou Silverlight tu utilises un converter pour representer la valeur par un autre string, une image, etc.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class Exploitation : ObjetDomaine { public enum TypeCategorie { Secteur, Complexe } public string Identifiant { get; set; } public string Parent_id { get; set; } public string Libelle { get; set; } public TypeCategorie Categorie {get;set;} public Exploitation() { } }
Retrouvez moi sur :
Mon Espace Developpez.com-------------------------------
Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code----------------------------
Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
Si tu voulais des strings, la solution à base de classe que je t'ai proposé fonctionne bien. Tu peux même la coupler avec un fichier de ressource pour être plus propre.
disons que mon objet exploitation correspond à une table de ma base qui à un champs id, parent_id,libelle, categorie ...
j'ai fait ça
j'essaye de trouver s'il existe une librairie permettant de faire ce genre de chose
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private bool IsTypeCategorie(string value) { if (Enum.IsDefined(typeof(TypeCategorie), value)) return true; else return false; }
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 public enumType Categorie:String { Secteur="secteur" } public enumType Modele:Voiture { ferrari=voitureFerrari() } private static voiture voitureFerrari() { .... }
J'ai rien compris a ton code, mais en tout cas je pense qu'il y'a un problème de modélisation dans la base! Tu ne devrais pas avoir les valeurs sous la forme de chaine de caractères pour les valeurs de tes enumerations! Il faut les stocker sous une forme d'entier et éventuellement créer une jointure avec une table qui contient les valeurs. Tout ca dans un soucis de normalisation.
Retrouvez moi sur :
Mon Espace Developpez.com-------------------------------
Dvp.NET, une librairie open-source de composants .NET
Mon blog: Up there in the code----------------------------
Twitter: NatMarchand
Ma société: So@t
Showrizo : Suivez votre planning de séries télé sous Windows 8
vu la tête de la base c'est pas cette table qui va la pourrir plus qu'elle ne l'est déjà
Er3van je crois qu'aujourd'hui la règles pour le nommage des table c'est bien la camelCase...![]()
Cela me surprend...
http://sqlpro.developpez.com/cours/standards/#L2.2
Ouais mais l'article est pas tout neuf, et les conventions, ça peut évoluer...
C'est vrai que jusqu'ici, en pratique j'ai surtout vu des noms sous la forme décrite dans l'article, mais on voit de plus en plus de noms de tables en CamelCase, notamment dans les articles de Microsoft concernant Entity Framework et les technos qui tournent autour
De toutes façons une convention, ce n'est pas unique, tout le monde n'est pas obligé d'adopter la même
Pas de questions techniques par MP ! Le forum est là pour ça...
Tutoriels : Les nouveautés de C# 6 - Accès aux données avec Dapper - Extraction de données de pages web à l'aide de HTML Agility Pack - La sérialisation XML avec .NET (Aller plus loin) - Les markup extensions en WPF
Oui, et jusqu'à ce que Microsoft affirme clairement une volonté d'uniformiser ça, ça restera à la discrétion des (développeurs et) dba.
Je suis partit sur les enums finalement
Voilà la base pour info:
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 public class Exploitation : ObjetDomaine { public string Identifiant { get; set; } public string Parent_id { get; set; } public string Libelle { get; set; } private string _categorie; public enum TypeCategorie { Secteur, Complexe, LS, Systeme, Gare, Voie } public string Categorie { get { if (IsTypeCategorie(_categorie)) return _categorie; else throw new Exception("La catégorie d'exploitation est incorrecte ou ne contient aucun élément"); } set { if (IsTypeCategorie(value)) _categorie = value; else throw new Exception("La catégorie d'exploitation est incorrecte: elle doit correspondre à un secteur, complexe..."); } } private bool IsTypeCategorie(string value) { if (Enum.IsDefined(typeof(TypeCategorie), value)) return true; else return false; } public Exploitation() { } }
je passe à résolu merci pour votre aide
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 /****** Objet*: Table [dbo].[TRD_EXPLOITATION] Date de génération du script*: 07/04/2011 09:20:01 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[TRD_EXPLOITATION]( [EXP_ID] [numeric](18, 0) IDENTITY(1,1) NOT NULL, [EXP_EXP_ID] [numeric](18, 0) NULL, [EXP_LIBELLE] [varchar](50) COLLATE French_CI_AS NOT NULL, [EXP_CATEGORIE] [varchar](50) COLLATE French_CI_AS NOT NULL, [EXP_USR_CRE] [varchar](10) COLLATE French_CI_AS NULL, [EXP_DAT_CRE] [datetime] NULL, [EXP_USR_MAJ] [varchar](10) COLLATE French_CI_AS NULL, [EXP_DAT_MAJ] [datetime] NULL, PRIMARY KEY CLUSTERED ( [EXP_ID] ASC )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO ALTER TABLE [dbo].[TRD_EXPLOITATION] WITH CHECK ADD FOREIGN KEY([EXP_EXP_ID]) REFERENCES [dbo].[TRD_EXPLOITATION] ([EXP_ID]) GO ALTER TABLE [dbo].[TRD_EXPLOITATION] WITH CHECK ADD CHECK (([EXP_CATEGORIE]='Voie' OR [EXP_CATEGORIE]='Gare' OR [EXP_CATEGORIE]='Systeme' OR [EXP_CATEGORIE]='LS' OR [EXP_CATEGORIE]='Complexe' OR [EXP_CATEGORIE]='Secteur'))![]()
Partager