【问题标题】:Error in lambda: No implicit convertion betweenlambda 中的错误:之间没有隐式转换
【发布时间】:2010-12-15 14:41:55
【问题描述】:

我将一个列表转换为列表并得到错误: "无法确定条件表达式的类型,因为 System.Collections.Generic.List 和 'void' 之间没有隐式转换

return (topics.Select(c => new TopicUi()
{
    Bookmarks = new List<Bookmark>().Add(new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName })
})).ToList();

为什么?

【问题讨论】:

    标签: c# collections lambda


    【解决方案1】:

    List 的 Add 方法的返回类型为 void,这应该适合您:

    return (topics.Select(c => new TopicUi
    {
        Bookmarks = new List<Bookmark> {
          new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName }
        }
    })).ToList();
    

    【讨论】:

    • 谢谢。现在它是固定的! :)
    【解决方案2】:

    首先,修正这条线

    Bookmarks = new List&lt;Bookmark&gt;().Add(new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName })

    Add 是一个 void 返回方法。该行应该是

    Bookmarks = new List&lt;Bookmark&gt; { new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName } }

    为了正确使用集合初始化。

    【讨论】:

      【解决方案3】:

      不用调用List&lt;T&gt;Add方法,直接使用对象初始化语法即可:

      return (topics.Select(c => new TopicUi()
      {
          Bookmarks = new List<Bookmark>() 
                        { new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName } }
                      )
      })).ToList();
      

      【讨论】:

        【解决方案4】:

        IList.Add 没有返回类型。试试这个;

        Func<YourCType, IList<Bookmark>> createBookmarkListFunc = (c) => 
        { 
            var list = new List<Bookmark>() { new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName };
            return list;
        });
        return (topics.Select(c => new TopicUi()
        {
            Bookmarks = createListFunc(c)
        })).ToList();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-11-25
          • 2013-09-01
          • 1970-01-01
          • 2012-03-13
          • 2013-12-22
          • 2015-07-14
          • 2018-12-28
          • 1970-01-01
          相关资源
          最近更新 更多