看起来我可能以错误的方式接近这个方向,而且方向非常受欢迎。
我试图在我的解决方案中触发所有Start
方法。
Start方法采用日期时间
然而,当试图将日期作为" Invoke"的参数传递时我遇到了错误
无法从System.DateTime转换为object []
欢迎任何想法
谢谢gws
scheduleDate = new DateTime(2010, 03, 11);
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "AssetConsultants");
foreach (Type t in typelist)
{
var methodInfo = t.GetMethod("Start", new Type[] {typeof(DateTime)} );
if (methodInfo == null) // the method doesn't exist
{
// throw some exception
}
var o = Activator.CreateInstance(t);
methodInfo.Invoke(o, scheduleDate);
}
答案 0 :(得分:8)
方法Invoke
的第二个参数需要一个带有参数的对象数组。所以不要在对象arrray中传递DateTime
包裹它:
methodInfo.Invoke(o, new object[] { scheduleDate });
答案 1 :(得分:0)
当期望参数是对象数组时,您将作为参数传递给DateTime。
尝试以下方法:
private void button_Click(object sender, EventArgs e)
{
var scheduleDate = new DateTime(2010, 03, 11);
var typelist = System.Reflection.Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace == "AssetConsultants")
.ToList();
foreach (Type t in typelist)
{
var methodInfo = t.GetMethod("Start", new Type[] { typeof(DateTime) });
if (methodInfo == null) // the method doesn't exist
{
// throw some exception
}
var o = Activator.CreateInstance(t);
methodInfo.Invoke(o, new object[] { scheduleDate });
}
}