MissingMemberException:调用方法时未找到方法
MissingMemberException: Method Not Found when invoking a method
我正在学习如何根据作为字符串传递的方法名称动态调用方法。我能理解的最好方法是调用一个方法。我试图通过传递其 class 名称和方法名称来调用方法。但它总是给我例外
Method not found.
我已尝试清理并重建所有内容。还是不行。
namespace TestInvoking
{
class Invoke
{
public string InvokeMember(string method, string para)
{
try
{
string Result = (string)typeof(Invoke).InvokeMember(method, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static | BindingFlags.IgnoreCase
| BindingFlags.NonPublic | BindingFlags.InvokeMethod,
null, null, new Object[] { para });
return Result;
}
catch (MissingMemberException e)
{
MessageBox.Show("Unable to access the testMethod field: {0}", e.Message);
return null;
}
}
public void testMethod(string tri)
{
MessageBox.Show("methodInvoked - {0}", tri);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Invoke methodInvoke = new Invoke();
text.Text = methodInvoke.InvokeMember("testMethod", "Method_Invoked");
}
你有几个问题。
- 您正在传递
BindingFlags.Static
但该方法不是静态的。
- 您正在将
null
传递给目标。只要 InvokeMember
不是
静态的,因此你已经有了一个实例,你可以通过
参数.
完成这两项更改后,代码将如下所示。
class Invoke
{
public string InvokeMember(string method, string para)
{
try
{
string Result = (string)typeof(Invoke).InvokeMember(method, BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, this, new Object[] { para });
return Result;
}
catch (MissingMemberException e)
{
MessageBox.Show("Unable to access the testMethod field: {0}", e.Message);
return null;
}
}
public void testMethod(string tri)
{
MessageBox.Show("methodInvoked - {0}", tri);
}
}
我正在学习如何根据作为字符串传递的方法名称动态调用方法。我能理解的最好方法是调用一个方法。我试图通过传递其 class 名称和方法名称来调用方法。但它总是给我例外
Method not found.
我已尝试清理并重建所有内容。还是不行。
namespace TestInvoking
{
class Invoke
{
public string InvokeMember(string method, string para)
{
try
{
string Result = (string)typeof(Invoke).InvokeMember(method, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static | BindingFlags.IgnoreCase
| BindingFlags.NonPublic | BindingFlags.InvokeMethod,
null, null, new Object[] { para });
return Result;
}
catch (MissingMemberException e)
{
MessageBox.Show("Unable to access the testMethod field: {0}", e.Message);
return null;
}
}
public void testMethod(string tri)
{
MessageBox.Show("methodInvoked - {0}", tri);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Invoke methodInvoke = new Invoke();
text.Text = methodInvoke.InvokeMember("testMethod", "Method_Invoked");
}
你有几个问题。
- 您正在传递
BindingFlags.Static
但该方法不是静态的。 - 您正在将
null
传递给目标。只要InvokeMember
不是 静态的,因此你已经有了一个实例,你可以通过 参数.
完成这两项更改后,代码将如下所示。
class Invoke
{
public string InvokeMember(string method, string para)
{
try
{
string Result = (string)typeof(Invoke).InvokeMember(method, BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.InvokeMethod, null, this, new Object[] { para });
return Result;
}
catch (MissingMemberException e)
{
MessageBox.Show("Unable to access the testMethod field: {0}", e.Message);
return null;
}
}
public void testMethod(string tri)
{
MessageBox.Show("methodInvoked - {0}", tri);
}
}