2010-05-17 96 views
12

我有这样定义的列表:C#的LINQ - 无法隐式转换IEnumerable的<string>列出<string>

public List<string> AttachmentURLS; 

我将项目添加到列表如下:

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

但我正在逐渐此错误:不能隐式转换IEnumerable到列表

我做错了什么?

+0

您是否尝试添加类型转换? instruction.AttachmentURLS =(列表)curItem.Attributes ... 当然,我忘了.ToList()方法。只需将其添加到最后。 – Nilbert 2010-05-17 23:31:41

回答

31

Where方法返回IEnumerable<T>。尝试添加

.ToList() 

到最后,像这样:

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

我想这意味着我可以从声明中删除现有的.ToList? – 2010-05-17 23:31:33

+3

是的,你可以删除它。 – smoak 2010-05-17 23:38:02

+0

得到这个错误,google'd它,显然我已经upvoted它,并在此之前,我需要更多的咖啡因。 – PurpleSmurph 2017-09-22 10:56:57

7

移动.ToList()到底这样

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

的拉制方法返回IEnumerable<string>Where阵列上会的工作,所以Split后不需要ToList

2

.ToList()应该在最后。因为在您的代码中,您先执行.ToList()操作,然后再次进入之前的状态。 Where方法返回一个IEnumerable。

+7

为什么你在别人做了八个小时后给出相同的答案? – Oliver 2010-05-18 08:08:40

相关问题