代码之家  ›  专栏  ›  技术社区  ›  gingerbreadboy

为什么一个函数有效而另一个(几乎相同)无效

  •  5
  • gingerbreadboy  · 技术社区  · 16 年前
    private static Dictionary<Type, Func<string, object>> _parseActions 
                                       = new Dictionary<Type, Func<string, object>>
        {
            { typeof(bool), value => {Convert.ToBoolean(value) ;}}
        };
    

    上面给出了一个错误

    类型的lambda表达式中的值 '系统功能<字符串,对象>'

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

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

    2 回复  |  直到 16 年前
        1
  •  16
  •   Marcelo Cantos    16 年前

    return 关键字:

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

    第二,仅仅是一个表达式并不需要显式表达式 .

        2
  •  2
  •   Robert MacLean    16 年前

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

    为了解决这个问题

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