我有以下列表:
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'
我还没有为此找到一个有效的解决方案。
任何人都可以帮助我吗?
感谢。
答案 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
,但是引用了正确类型的列表。由于您不知道您的实际类型,您可能有一些界面来访问列表(需要强制转换)。