我试图通过反射调用一个类方法。
public class A
{
public string B(IWork WorkToDo)
{
return WorkToDo.ToString();
}
}
“Work”类继承自“IWork”。
Type type = Type.GetType("A");
MethodInfo MI = type.GetMethod("B");
object X = MI.Invoke(Activator.CreateInstance(type), new object[] { new Work() });
上面的行抛出参数错误..“预期 IWork...而不是 Work..”
如果我写
object X = MI.Invoke(Activator.CreateInstance(type), new object[] { (new Work() as IWork) });
有用。
我想知道为什么它不能自动推断和类型转换多态性还是我完全错了?我们可以有一个自定义的 Binder 类来做管道吗?
请帮忙。
编辑
好的。抱歉,伙计们隐瞒了真正的问题。它适用于上述..也适用于 Array[] 但在 List<> 上抛出错误...
所以我的课是:
public class A
{
public string B(List<IWork> WorkToDo)
{
return WorkToDo.ToString();
}
}
Type type = Type.GetType("A");
MethodInfo MI = type.GetMethod("B");
List<Work> WL = new List<Work>(); WL.Add(new Work());
object X = MI.Invoke(Activator.CreateInstance(type), new object[] { WL });
错误是:
'System.Collections.Generic.List
1[Work]' cannot be converted to type 'System.Collections.Generic.List
1[IWork]' 类型的对象。