我有一个
List<InputField>
但我需要一个
List<IDataField>
有没有办法在C#中强制转换?还是使用Linq获得相同的结果?
我有两个实现相同接口(interface)的类:
interface IDataField { }
class InputField : IDataField { }
class PurchaseField : IDataField { }
此列表来自Linq-to-Sql查询:
List<InputField> list = (from i .... select i).ToList();
最佳答案
.OfType 和.Cast 都将返回T的列表,但是两种方法的含义不同。
list.OfType()过滤原始列表并返回所有类型为T的项目,并跳过那些不是该类型的项目。
list.Cast()将原始列表中的所有项目强制转换为类型T,并为无法强制转换为该类型的项目引发异常。
在您的情况下,两者都会得出相同的结果,但是使用.Cast()可以更清楚地传达您的意图,因此我建议您使用它。
List<InputField> list = (from i .... select i).Cast<IDataField>().ToList();
关于c# - 如何有效地转换List <T>?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/504729/