Bonjour à tous,

Je rencontre un petit problème au niveau des lambdas expressions.

Voici un code qui, initialement, marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
private delegate void WindowInvokeHandler();
 
public static void close()
{
    //...
 
    Application.window.Invoke(new WindowInvokeHandler(Application.window.Close()));
 
    //...
}
Par contre, lorsque j'essye de remplacer mon delegate par une lambda expression comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
public static void close()
{
    //...
 
    Application.window.Invoke(() => Application.window.Close());
 
    //...
}
J'obtiens l'erreur:
Citation Envoyé par Visual Studio
Impossible de convertir expression lambda en type 'System.Delegate', car il ne s'agit pas d'un type délégué.
Mais si je fais ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
private delegate void WindowInvokeHandler();
 
public static void close()
{
    //...
    WindowInvokeHandler wih = () => Application.window.Close();
    Application.window.Invoke(wih);
    //...
}
ça marche parfaitement...

Donc là je suis perplexe... quelle est, au final, la différence entre les deux dernières versions ? Je suis pas trop expert des lambdas expressions, donc je ne vois vraiment pas...
Surtout que:
WindowInvokeHandler = lambda expression //OK
Invoke(System.Delegate = WindowInvokeHandler) //OK

Donc conclusion : Invoke(System.Delegate = lambda expression) devrait marcher non?
Non ?

Donc voilà, si quelqu'un voit mon erreur et peut m'éclairer...
Je vous remercie par avance !