Почему один Func действителен, а другой (почти идентичен) нет - PullRequest
5 голосов
/ 22 апреля 2010
private static Dictionary<Type, Func<string, object>> _parseActions 
                                   = new Dictionary<Type, Func<string, object>>
    {
        { typeof(bool), value => {Convert.ToBoolean(value) ;}}
    };

Выше выдает ошибку

Ошибка 14 Не все пути кода возвращают значение в лямбда-выражении типа 'System.Func <строка, объект>'

Тем не менее, это нормально.

private static Dictionary<Type, Func<string, object>> _parseActions 
                                   = new Dictionary<Type, Func<string, object>>
    {
        { typeof(bool), value => Convert.ToBoolean(value) }
    };

Я не понимаю разницы между ними. Я думал, что дополнительные фигурные скобки в example1 позволяют нам использовать несколько строк в функции anon, так почему они повлияли на значение кода?

Ответы [ 2 ]

16 голосов
/ 22 апреля 2010

Первый использует блок кода, который будет возвращать значение, только если вы используете ключевое слово return:

value => { return Convert.ToBoolean(value); }

Второе, будучи просто выражением, не требует явного return.

2 голосов
/ 22 апреля 2010

В первом случае вы ничего не возвращаете, и вы должны явно возвращать значение, поскольку вы завернули его, а во втором вы неявно возвращаете значение.

Чтобы исправить это, сделайте

private static Dictionary<Type, Func<string, object>> _parseActions = new Dictionary<Type, Func<string, object>> 
{ 
  { typeof(bool), value => { return Convert.ToBoolean(value) ;}} 
}; 
...