2010-05-17 7 views
12

J'ai une liste définie comme ceci:C# LINQ - peut pas convertir implicitement IEnumerable <string> Liste <string>

public List<string> AttachmentURLS; 

Je suis d'ajouter des éléments à la liste comme ceci:

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

Mais je reçois cette erreur: Impossible de convertir IEnumerable en Liste

Qu'est-ce que je fais de mal?

+0

Avez-vous essayé d'ajouter une distribution de type? instruction.AttachmentURLS = (Liste ) curItem.Attributes ... Oh bien sûr, j'ai oublié la méthode .ToList(). Ajoutez juste cela à la fin. – Nilbert

Répondre

31

La méthode Where renvoie un IEnumerable<T>. Essayez d'ajouter

.ToList() 

à la fin comme ceci:

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

Je suppose que cela signifie que je peux supprimer mon .ToList existant à partir du milieu de la déclaration? –

+3

Oui, vous pouvez le supprimer. – smoak

+0

J'ai cette erreur, google, apparemment, je l'ai déjà upvoted et été ici avant, j'ai besoin de plus de caféine. – PurpleSmurph

7

Déplacer le .ToList() jusqu'à la fin comme celui-ci

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

La méthode d'extension Où retourne IEnumerable<string> et Where travaillera sur les tableaux, de sorte que le ToList n'est pas nécessaire après la Split.

2

Le .ToList() devrait être enfin. Parce que dans votre code vous exécutez l'opération .ToList() plus tôt et après cela à nouveau il passe à l'état précédent. La méthode Where renvoie un IEnumerable.

+7

pourquoi donnez-vous la même réponse huit heures après que quelqu'un d'autre l'a fait? – Oliver

Questions connexes