.OfType
list.OfType 过滤原始列表并返回T类型的所有项目,并跳过那些不属于该类型的项目.
list.Cast 将原始列表中的所有项目强制转换为T类型,并为无法转换为该类型的项目抛出异常.
在你的情况下,两者都会给出相同的结果,但使用.Cast可以更清楚地传达你的意图,所以我建议使用它.
Listlist = (from i .... select i).Cast .ToList();
Listraw = (from i .... select i).ToList(); List result = raw.OfType ().ToList();
您也可以使用List.ConvertAll.
文档:http://msdn.microsoft.com/en-us/library/73fe8cwf.aspx
例:
ListnewList = oldList.ConvertAll(i => i as IDataField);
由于列表来自
Listlist = (from i .... select i).ToList();
难道你不能只修复"选择我"部分而不是返回IDataField吗?像这样的东西:
Listlist = (from i .... select (IDataField)i).ToList();
如果这不起作用,也许IEnumerable的"Cast"扩展可以工作:
Listlist2 = list.Cast ();