To jest mój kodu testu:Argument „pustka” nie jest przypisane do parametru typu „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("");
}
}
2 pierwszych rozmów działa, ale zastanawiam się, dlaczego 3rd jeden nie. Nie podoba mi się kod wewnątrz Do2, ponieważ wydaje się dziwne, że mam tam typ typu action("")
, aby go uruchomić.
Czy ktoś mógłby wyjaśnić 2 rzeczy, których nie rozumiem?
- Dlaczego nie mogę pisać trzecią linię takiego z wywołaniem Wykonaj
- Dlaczego muszę napisać działanie („”) w celu zmusić go do pracy w DO2
zawsze zaznaczone odpowiedzi, które pomogły mi. Jeśli nie ma rozwiązania, które zapewnia coś użytecznego, nie zaznaczam go, dopóki nie otrzymam odpowiedzi, która mi pomoże. –