我有一个

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/

10-12 12:49
查看更多