Скриншот говорит об этом. У меня есть перегрузки, как показано на скриншоте. При использовании строки в качестве второго параметра компилятор должен выяснить, что первый аргумент может быть только Func, а не выражением. Но компилятор выдает сообщение об ошибке: «Выражение lamda с телом оператора не может быть преобразовано в дерево выражений».Ошибка компилятора для перегрузки Expression/Func
Почему компилятор не может определить правильную перегрузку?
Явное литье не помогает. Что работает, когда я создаю локальную переменную типа Func, а затем использую ее вместо этого.
Рамки используется FakeItEasy 1.24.0
EDIT:
Вот код, который показывает поведение:
public static void Main(string[] args)
{
//compiler error
A.CallTo(() => Main(A<string[]>.That.Matches(strings =>
{
return true;
}, "description")));
//compiles
Func<string[], bool> predicate = strings =>
{
return true;
};
A.CallTo(() => Main(A<string[]>.That.Matches(predicate, "description")));
Console.ReadLine();
}
не могли бы вы опубликовать код, а не скриншот? – mybirthname
Вы не используете 'return' только для тела лямбда только для выражения ....' string => true'. – leppie
@leppie: правильно, но это не так. Как вы можете видеть на скриншоте, компилятор должен использовать перегрузку с помощью Func, и поэтому тело метода должно быть в порядке. Вместо этого компилятор дает ошибку. Вопрос в том, почему. –
cmart