J'apprends l'expression lambda et les délégués. Pendant que j'essaie d'exécuter ce qui suit, j'obtiens une erreur sur la ligne marquée en gras. (Erreur: L'opérateur '+ =' ne peut pas être appliqué aux opérandes de type 'Test.MessageDelegate' et 'expression lambda') .Aidez-moi à gérer l'expression lambda.C# Lambda expression -Help
namespace Test
{
public delegate void MessageDelegate(string title,object sender,EventArgs e);
class Program
{
static event MessageDelegate logEvent;
static void Main(string[] args)
{
logEvent = new MessageDelegate(OnLog);
logEvent("title",Program.logEvent,EventArgs.Empty);
logevent + = (src, e) => {onlog ("Some", Src, e); }
Console.ReadKey(true);
}
static void OnLog(string title, object sender, EventArgs e)
{
if (logEvent != null)
{
Console.WriteLine("title={0}", title);
Console.WriteLine("sender={0}", sender);
Console.WriteLine("arguments={0}",e.GetType());
}
}
}
}
Supposons que si je mets à jour mon Main() comme logEvent + = (str, src, e) => {OnLog ("Un", Program.logEvent, EventArgs.Empty); } logEvent + = (str, src, e) => {OnLog ("Deux", Program.logEvent, EventArgs.Empty); } (rien n'est exécuté, comment puis-je l'appeler?) – user196546
Je veux dire, considère que Main() a seulement deux lignes comme indiqué dans le commentaire ci-dessus. – user196546
Hmm, je ne suis pas sûr de suivre ce que vous voulez faire ici. Le "+ =" affecte un écouteur à un certain événement. Lorsque logEvent arrive, invoquez OnLog. Cette ligne de code elle-même ne déclenche pas l'événement de journal, elle indique seulement que faire * quand * l'événement est déclenché. Pour augmenter l'événement de journal, vous devriez faire 'si (logEvent! = Null) logEvent ("title", this, null);' (ou ce que vous voulez passer) –