Kann nicht implizit konvertiert Typ 'void' - System.Aktion<int>

Ich versuche zu erstellen .net-standard-delegate-Aktion mit der Eingabe-parameter int. Aber ich bin immer

Kann nicht implizit konvertiert Typ 'void' - System.Aktion.

Habe ich gelernt, dass die gleichen Rückgabetyp Methoden können Hinzugefügt werden, um multicast-Delegaten. Unten ist mein code. Was ist falsch an diesem code? Ich sehe nicht ein Kompilierungsfehler, wenn ich Schreibe lambda-Ausdruck.

static void Main(string[] args)
{
    Action<int> AddBook = AddBookwithId(15); //Here is the error
    AddBook += x => Console.WriteLine("Added book with :{0}" , x ); //No compile error here
    AddBook += AddBookwithISBN(56434);//of course, the same error here too.
}

public static void AddBookwithId(int y)
{
    Console.WriteLine( "Added Book to the shelf with the ID : {0} ", y ); 
}

public static void AddBookwithISBN(int y)
{
    Console.WriteLine("Added Book to the shelf  with the ISBN: {0} ", y + 2);
}
  • Sie sind dem Aufruf der Funktion in der ersten Zeile. Die Rechte Seite des Gleichheitszeichens ist AddBookwithId(15) ist ein Funktionsaufruf. Die zweite Zeile fügt ein lambda-Ausdruck. Die RHS des add-Zuordnung ist x => Console.WriteLine(...) was ist ein lambda-Ausdruck mit dem parameter x und eine Einrichtung, die nennt Console.WriteLine(). Zeile drei ist wieder die Funktion aufrufen. Die RHS ist AddBookwithISBN(56434) was ist ein Funktionsaufruf.
  • Der Wert von AddBookwithId ist eine Referenz auf eine Methode. AddBookwithId(15) mit parens ist ein Aufruf der Methode, also der Wert der AddBookwithId(15) ist, was die Methode zurückgibt -- void in diesem Fall nichts. Sie wollen nicht zu geben, das Ergebnis eines Aufrufs des event-handlers; Sie wollen sagen, der handler, wie Sie zum aufrufen der Methode selbst. Also Sie wollen ihm einen Verweis auf die Methode: AddBookwithId.
InformationsquelleAutor Alienalone | 2017-02-23
Schreibe einen Kommentar