Подтвердить что ты не робот

Назначить метод со значениями по умолчанию для Func <> без этих параметров?

Я хотел бы иметь возможность сделать следующее:

Func<int,bool> tryMethodFunc = TryMethod;

Где TryMethod имеет подпись, например:

bool TryMethod(int value, int value2 = 0, double value3 = 100.0)

Я не против того, чтобы взломать метод в карри-формат, но это будет больше работать, если есть способ сделать это без этого.

4b9b3361

Ответ 1

Дополнительные параметры - это языковая функция, компилятор отвечает за перевод вызовов методам с необязательными параметрами на полный вызов со значениями.

Посмотрите на этот простой фрагмент кода ниже,

    public void GeneralMethod()
    {
        TestMethod(6);
    }

    public bool TestMethod(int a, int b = 8)
    {
        return true;
    }

Когда вы разбираете эти методы, вы увидите, что компилятор С# фактически заменил вызов TestMethod одним параметром на вызов с обоими параметрами. Экран, снятый с ildasm, доказывает, что

ildasm screen shot

Теперь, переходя к текущей проблеме, строка кода, о которой идет речь, пытается связать Func с методом, который имеет необязательные параметры. Если компилятор С# должен обработать это, он должен убедиться, что Func некоторые знают значения по умолчанию. Хотя это могло быть достигнуто компилятором, он полностью побеждает цель Func.

Цель Func - предоставить способ для хранения анонимных методов обобщенным и простым способом. " ссылка

Другой подобный вопрос в stackoverflow можно найти здесь

Решение @Chris Sinclair работает вокруг этого, создавая анонимный метод, который принимает один параметр и вызывает TryMethod из тела этого анонимного метода.