Dies ist mein Test-Code für den Parameter:Argumenttyp ‚VOID‘ ist nicht übertragbar Typ ‚System.Action‘
class PassingInActionStatement
{
static void Main(string[] args)
{
var dsufac = new DoSomethingUsefulForAChange();
dsufac.Do(WriteToConsole);
dsufac.Do2(s => WriteToConsoleWithSomethingExtra("Test"));
dsufac.Do(WriteToConsoleWithSomethingExtra("Test")); // Does not compile
}
internal static void WriteToConsole()
{
Console.WriteLine("Done");
}
internal static void WriteToConsoleWithSomethingExtra(String input)
{
Console.WriteLine(input);
}
}
internal class DoSomethingUsefulForAChange
{
internal void Do(Action action)
{
action();
}
internal void Do2(Action<String> action)
{
action("");
}
}
Die ersten 2 Anrufe arbeiten, aber ich frage mich, warum die dritte man nicht. Ich mag den Code in Do2 nicht, da es merkwürdig erscheint, dass ich den Typ action("")
dort eingegeben habe, um es zum Laufen zu bringen.
Könnte jemand bitte die 2 Dinge erklären, die ich nicht verstehe bitte?
- Warum ich nicht die dritte Zeile wie die mit Aufruf Do
- Warum ich Aktion schreiben muß („“), um es tatsächlich in Do2
ich immer Antworten markiert, die mir geholfen. Wenn es keine Lösung gibt, die etwas Nützliches bietet, markiere ich es nicht, bis ich die Antwort bekomme, die mir hilft. –