2010-05-17 18 views
12

Mam listę zdefiniowaną następująco:C# LINQ - nie można niejawnie przekonwertować IEnumerable <string> do listy <string>

public List<string> AttachmentURLS; 

dodaję elementy do listy jak ten:

instruction.AttachmentURLS = curItem.Attributes["ows_Attachments"].Value.Split(';').ToList().Where(Attachment => !String.IsNullOrEmpty(Attachment)); 

Ale jestem coraz ten błąd: nie można niejawnie przekonwertować IEnumerable do listy

Co robię źle?

+0

Czy próbowałeś dodać rzut typu? instrukcja.AttachmentURLS = (Lista ) curItem.Attributes ... O, oczywiście, zapomniałem o metodzie .ToList(). Po prostu dodaj to do końca. – Nilbert

Odpowiedz

31

Metoda Where zwraca wartość IEnumerable<T>. Spróbuj dodać

.ToList() 

do końca tak:

instruction.AttachmentURLS = curItem.Attributes["ows_Attachments"].Value.Split(';').ToList().Where(Attachment => !String.IsNullOrEmpty(Attachment)).ToList(); 
+0

Myślę, że to oznacza, że ​​mogę usunąć istniejącą .ToList ze środka wyciągu? –

+3

Tak, możesz go usunąć. – smoak

+0

Mam ten błąd, google'd to, najwyraźniej już go upvoted i byłem tu wcześniej, potrzebuję więcej kofeiny. – PurpleSmurph

7

Przesuń .ToList() do końca jak to

instruction.AttachmentURLS = curItem 
    .Attributes["ows_Attachments"] 
    .Value 
    .Split(';') 
    .Where(Attachment => !String.IsNullOrEmpty(Attachment)) 
    .ToList(); 

WHERE metodę rozszerzenia powraca IEnumerable<string> i Where będzie działać na macierzach, więc ToList nie jest potrzebna po Split.

2

.ToList() powinny być w końcu. Ponieważ w twoim kodzie wcześniej wykonujesz operację .ToList(), a po niej znowu przechodzi ona do poprzedniego stanu. Metoda Where zwraca wartość IEnumerable.

+7

dlaczego dajesz tę samą odpowiedź osiem godzin po tym, jak ktoś inny to zrobił? – Oliver

Powiązane problemy