2010-12-15 88 views
0

Je convertis une liste de liste et d'erreur: "Le type d'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre System.Collections.Generic.List et 'void' ?Erreur dans lambda: Aucune conversion implicite entre

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

Pourquoi

Répondre

3

La méthode Add de la liste a un type de retour de vide, cela devrait fonctionner pour vous:

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

Merci. Maintenant c'est corrigé! :) – podeig

+0

@podeig, Vous pouvez définir cette réponse comme acceptée. – climbage

-1

IList.Add n'a pas de type de retour Essayez ceci;.

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

À tout LEAT, fixer cette ligne

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

Add est une méthode de retour de vide. La ligne devrait être

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

Pour utiliser correctement l'initialisation de la collection.

+0

Merci pour l'explication! Tu as tout à fait raison! – podeig

1

Plutôt que d'appeler la méthode Add de List<T>, vous pouvez simplement utiliser la syntaxe d'initialisation d'objet:

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