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

上面给出了一个错误

错误 14 并非所有代码路径都在 'System.Func<string,object>' 类型的 lambda 表达式中返回值

但是,下面这没问题。

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

我不明白两者之间的区别。我认为 example1 中的额外大括号是为了让我们在 anon 函数中使用多行,那么为什么它们会影响代码的含义呢?

4

2 回答 2

16

return第一个使用代码块,如果您使用关键字,它将只返回一个值:

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

第二,只是一个表达式不需要显式的return.

于 2010-04-22T11:28:25.383 回答
2

第一个你没有返回任何东西,你必须显式返回一个值,因为你已经包装了它,第二个你隐式返回一个值。

修复它做

private static Dictionary<Type, Func<string, object>> _parseActions = new Dictionary<Type, Func<string, object>> 
{ 
  { typeof(bool), value => { return Convert.ToBoolean(value) ;}} 
}; 
于 2010-04-22T11:31:16.237 回答