Mais quel est l'interet?
Tu vas devoir stocker la valeur dans une variable, de quel type? Tu va devoir faire un cast également non?
Version imprimable
Mais quel est l'interet?
Tu vas devoir stocker la valeur dans une variable, de quel type? Tu va devoir faire un cast également non?
Oui tout à fait d'accord avec vous que c un peu n'importe quoi :mouarf:
En fait, je suis en train de développer un FrameWork qui facilite les tâches aux développeurs. Développer cette méthode, ça permet aux développeurs de ne plus faire un cast. C'est, directement, qu'ils vont avoir la valeur typé avec le type exact.
Par exemple:
Lors de la conversation des données, récupérées à partir d'une BDD dans un DataTable (dt), en objets métiers :
Code:
1
2
3
4
5
6
7 for (int i=0; i<dt.Rows.Count; i++) { Commande cmd = new Commande(); cmd.Id = Convert.ToInt32(dt.Rows[i]["ID"].ToString()); //en principe on fait comme ça !!! cmd.Id = GetData<dt.Columns["ID"].DataType>(dt.Rows[i]["ID"]); //mon but est de faire une chose plutôt comme ça !!! }
Ca me parait une Fausse Bonne Idee (FBI) en fait. Si tu ne connais pas le type de ta colonne par avance, comment peux-tu par la suite prendre des décisions dans ton programme sans tester toutes les 5 secondes. Imagine que tu veuilles réaliser des opérations arithmétiques. Avec une méthode comme celle que tu cherches, tu t'exposes à des crashes à l'exécution de toute beauté. En imaginant que ce code compile (ce qui n'est pas le cas)Que se passe-t-il si jamais Coefficient te renvoit un "null", ou string.Empty, ou 0?Code:
1
2 var maVar = GetData<dc.DataType>(dt.Rows[i]["Coefficient"]); int resultat = 15 / maVar;
On peut être générique tout en étant explicite. Là c'est loin d'être le cas.
En dehors de ça il y a la question des performances. Le code ci-dessous fait le testL'utilisation de "Convert.ToInt32" est 4,976797093411506 fois plus rapide.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Stopwatch w = new Stopwatch(); int loops = 100000; w.Start(); for (int i = 0; i < loops; i++) { int s = Tools.GenericConverter<int>(i.ToString()); } w.Stop(); Console.WriteLine(w.ElapsedTicks); w.Restart(); for (int i = 0; i < loops; i++) { int s = Convert.ToInt32(i.ToString()); } w.Stop(); Console.WriteLine(w.ElapsedTicks); Console.ReadLine();
Compte tenu des risques et des perfs pour moi c'est un non.
Si tu montes un Framework, utilise des objets métier typés plutôt que des DataTable. Les DataTable c'est un peu ancien pour ne pas dire antique.
A+