lambda中的错误:之间没有隐式转换

时间:2010-12-15 14:41:56

标签: c# collections lambda

我将一个列表转换为列表并获取错误: “无法确定条件表达式的类型,因为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();

为什么?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

非常小,修好这一行

Bookmarks = new List<Bookmark>().Add(new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName })

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

Bookmarks = new List<Bookmark> { new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName } }

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

答案 2 :(得分:1)

您可以只使用对象初始化语法,而不是调用Add的{​​{1}}方法:

List<T>

答案 3 :(得分:-1)

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();