为什么一个Func有效而另一个(几乎相同)没有

时间:2010-04-22 11:26:27

标签: function c#-3.0 delegates anonymous-methods

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

上面给出了错误

  

错误14并非所有代码路径都返回   lambda表达式中的值   'System.Func&LT;串,对象&gt;'

但是下面的确如此。

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

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

2 个答案:

答案 0 :(得分:16)

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

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

第二个,只是一个表达式,不需要明确的return

答案 1 :(得分:2)

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

要修复它吗

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