2010-05-17 25 views
12

tengo una lista definida de esta manera:C# LINQ - No se puede convertir implícitamente IEnumerable <string> a la lista <string>

public List<string> AttachmentURLS; 

Estoy añadiendo elementos a la lista como esta:

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

Pero me estoy este error: No se puede convertir implícitamente IEnumerable a la lista

¿Qué estoy haciendo mal?

+0

¿Has intentado agregar un tipo de elenco? instruction.AttachmentURLS = (List ) curItem.Attributes ... Oh, por supuesto, me olvidé del método .ToList(). Solo agrega eso hasta el final. – Nilbert

Respuesta

31

El método Where devuelve IEnumerable<T>. Trate de añadir

.ToList() 

a finales de este modo:

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

Supongo que eso significa que puedo eliminar mi .ToList existente del medio de la declaración. –

+3

Sí, puedes eliminarlo. – smoak

+0

Recibí este error, google'd, al parecer ya lo he votado anteriormente y he estado aquí antes, necesito más cafeína. – PurpleSmurph

7

Mover el .ToList() hasta el final como esta

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

El método de extensión Cuando regresa IEnumerable<string> y Where trabajará en matrices, por lo que el ToList no es necesaria después de la Split.

2

El .ToList() debería haber al pasado. Debido a que en su código realiza la operación .ToList() anteriormente y después de eso vuelve al estado anterior. El método Where devuelve un IEnumerable.

+7

¿por qué le da la misma respuesta ocho horas después de que alguien más lo hizo? – Oliver

Cuestiones relacionadas