Ответ 1
Дополнительные параметры - это языковая функция, компилятор отвечает за перевод вызовов методам с необязательными параметрами на полный вызов со значениями.
Посмотрите на этот простой фрагмент кода ниже,
public void GeneralMethod()
{
TestMethod(6);
}
public bool TestMethod(int a, int b = 8)
{
return true;
}
Когда вы разбираете эти методы, вы увидите, что компилятор С# фактически заменил вызов TestMethod одним параметром на вызов с обоими параметрами. Экран, снятый с ildasm, доказывает, что
Теперь, переходя к текущей проблеме, строка кода, о которой идет речь, пытается связать Func с методом, который имеет необязательные параметры. Если компилятор С# должен обработать это, он должен убедиться, что Func некоторые знают значения по умолчанию. Хотя это могло быть достигнуто компилятором, он полностью побеждает цель Func.
Цель Func - предоставить способ для хранения анонимных методов обобщенным и простым способом. " ссылка
Другой подобный вопрос в stackoverflow можно найти здесь
Решение @Chris Sinclair работает вокруг этого, создавая анонимный метод, который принимает один параметр и вызывает TryMethod из тела этого анонимного метода.