【问题标题】: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<Bookmark>().Add(new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName })
Add 是一个 void 返回方法。该行应该是
Bookmarks = new List<Bookmark> { new Bookmark { Id = c.BookmarkId, Name = c.BookmarkName } }
为了正确使用集合初始化。
【解决方案3】:
不用调用List<T>的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();