将List转换为给定的Type

时间:2013-03-25 16:52:33

标签: c# list types casting type-conversion

我有以下列表:

public List<EntityBase> PossibleReplacements

我也有一个Type

public Type type;

type将包含一个继承EntityBase的特定类类型(这就是我的应用程序的工作方式)。 现在我需要将列表PossibleReplacements转换为类型&#39;类型&#39;

的列表

这样的事情:

List<type> lijst = PossibleReplacements.Cast<type>();

但这会产生错误

'ReplacePopupModel.type' is a 'field' but is used like a 'type' 

我还没有为此找到一个有效的解决方案。

任何人都可以帮助我吗?

感谢。

3 个答案:

答案 0 :(得分:1)

您无法使用Cast,因为它在运行时不是类型安全的,您只需使用where进行选择:

var lijst = PossibleReplacements.Where(t => t.GetType() == type);

答案 1 :(得分:1)

您可以输出与该类型匹配的项目,如下所示:

List<EntityBase> list = PossibleReplacements.Where(e => type.IsAssignableFrom(e.GetType())).ToList();

此列表仅包含您在type中指定的特定类型(或其子类)的项目。

但是,您无法转换为特定的List<T>类型,因为这在编译时是未知的。

如果您尝试提取在编译时已知的特定类型的项目,您可以使用:

List<TheType> list = PossibleReplacements.OfType<TheType>().ToList();

答案 2 :(得分:0)

不是没有反思,也不安全。但您可以按照Reed Copseys的第一个提示检查所有条目是否可分配给您的类型,然后使用反射的强制转换方法:

var type = ...your type...

var cast = typeof(IEnumerable<>).GetMethod("Cast").MakeGenericMethod(type);
var list = cast.Invoke(PossibleReplacements, null);

变量list现在是object,但是引用了正确类型的列表。由于您不知道您的实际类型,您可能有一些界面来访问列表(需要强制转换)。