Bonsoir à tous,
derrière ce titre occulte se cache en fait une question très simple.
Imaginons le code suivant:
Utilisé dans le cas suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void BeginUpdate() { if (count == 0) my_ctrl.Enabled = false; count++; } void EndUpdate() { count--; if (count == 0) my_ctrl.Enabled = true; }
Pour éviter cette écriture disgracieuse j'ai pensé aux deux méthodes suivantes:
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 void Toto() { BeginUpdate(); if (condition) { // do something EndUpdate(); return true; } else { // do something else EndUpdate(); return true; } else { EndUpdate(); return false; } }
Et une autre méthode un peu plus 'hack' avec une classe encapsulant une delegate et l'executant dans le DoDispose:
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 void Toto() { try { BeginUpdate(); if (condition) { // do something return true; } else { // do something else return true; } else { return false; } } finally { EndUpdate(); } }
Quelqu'un connait-il un autre manière plus 'propre' de faire? Ou sinon, laquelle de ces trois methodes est la plus propre?
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 void Toto() { BeginUpdate(); using (ScopeFinalizer finalizer = new ScopeFinalizer(delegate() { EndUpdate(); }) { if (condition) { // do something return true; } else { // do something else return true; } else { return false; } } }
Merci d'avance pour vos suggestion!
Bonne soirée.
Partager