我试图通过使用某些类型的字符串表示来摆脱一些引用.但是编译器不允许我按照通用方法的方式进行操作.我试过这个:
IContainer container = components as IContainer;
Type type = Type.GetType("MyNamespace.MyType");
foreach (var component in container.Components.OfType<Type.GetType("MyNamespace.MyType")>()) {
...
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
foreach (var component in container.Components.OfType<type>()) {
...
}
Run Code Online (Sandbox Code Playgroud)
对于第一个循环,我得到:"运算符'<'不能应用于'方法组'和'System.Type'类型的操作数,而对于第二个循环,变量超出范围由于某种原因.为什么会发生这种情况,有办法解决吗?先谢谢.
您可以使用Type.MakeGenericType.例:
Type.GetType("YourGenericType").MakeGenericType(Type.GetType("yourTypeParameter"))
Run Code Online (Sandbox Code Playgroud)
具有由字符串确定的typeparameter的List的示例:
typeof(List<>).MakeGenericType(Type.GetType("System.String"))
Run Code Online (Sandbox Code Playgroud)
这给你的相同
typeof(List<string>)
Run Code Online (Sandbox Code Playgroud)
但是您仍然无法使用Type实例来调用Enumerable.OfType.你可以使用这样的东西:
foreach (var component in container.Components.Where(o => o.GetType().IsAssignableFrom(yourType)))
{
//...
}
Run Code Online (Sandbox Code Playgroud)
当然,这很快就会变得混乱,所以我会考虑改变你的方法.你为什么不使用字符串?