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 istx => Console.WriteLine(...)
was ist ein lambda-Ausdruck mit dem parameterx
und eine Einrichtung, die nenntConsole.WriteLine()
. Zeile drei ist wieder die Funktion aufrufen. Die RHS istAddBookwithISBN(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 derAddBookwithId(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
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den code unten kompiliert... Die ganze Zahl wird voraussichtlich überschritten werden, wenn die Aktion aufgerufen wird.
Warum nicht verwenden Lambda-Ausdrücke?
In der Tat, Sie bereits verwendet haben es in dieser Codezeile:
Dieser Folge: