Почему я получаю "не весь путь кода возвращает ошибку значения" в Func Delegate

У меня есть метод, который принимает Func:

private void testFuncCallBack(Func<string> funcDelegate)
 {
 //Some Code
 }
</string>

Теперь я хочу вызвать и передать func в качестве параметра:

testFuncCallBack(() =>{"";});

Теперь я получаю сообщение о том, что не весь путь кода возвращает значение. Но как только я удаляю фигурные скобки и ; он отлично работает.

Почему Func не компилируется с помощью Curly Braces.

То же самое работает с действием:

private void testActionCallBack(Action actionDelegate)
 {
 //Some Code
 }
 testActionCallBack(() => { int x = 10; });
1 ответ

Когда мы пишем что-то внутри фигурных скобок, оно становится выражением, а не выражением.

В этом случае, когда мы говорим о лямбда-выражениях, выражение => "" будет делать возврат "". Но если мы хотим сделать выражение, то утверждение должно завершиться возвратом;

Поэтому мы можем записать его как testFuncCallBack(() =>""); или testFuncCallBack(() =>{ return "";}); , SO в более позднем случае, если это утверждение, лучше вернуть некоторое значение.

licensed under cc by-sa 3.0 with attribution.