Это мой тестовый код:
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 вызова работают, но мне интересно, почему третий не делает этого. Мне не нравится код внутри Do2, так как кажется странным, что у меня есть тип типа action("")
, чтобы заставить его работать.
Может кто-нибудь объяснить, что я не понимаю, пожалуйста?
- Почему я не могу написать третью строку с вызовом Do
- Почему мне нужно написать action (""), чтобы заставить его работать в Do2