[英]Type.GetMethod returns “Object reference not set to an instance of an object.”
有一天,当我遇到问题时,我正在尝试使用Type.GetMethod方法。
我的程序是Windows应用程序。 在用于输出的表单中有一个文本框,Form1_Load方法中只有这两个代码块:
MethodInfo info2 = typeof(IEnumerable<int>).GetMethod("GetEnumerator");
textBox1.Text += info2.ToString();
MethodInfo info1 = typeof(IEnumerator<int>).GetMethod("MoveNext");
textBox1.Text += info1.ToString();
第一个GetMethod返回了正确的信息,但第二个没有返回任何信息。
所以我更进了一步,在代码中包含了一个try / catch语句:
try
{
MethodInfo info2 = typeof(IEnumerable<int>).GetMethod("GetEnumerator");
textBox1.Text += info2.ToString();
MethodInfo info1 = typeof(IEnumerator<int>).GetMethod("MoveNext");
textBox1.Text += info1.ToString();
}
catch (Exception v)
{
textBox1.Text += v.Message;
}
第二个GetMethod现在给我错误:
Object reference not set to an instance of an object.
我很困惑。 这两种方法都不是静态的,也不采用任何参数。 为什么MoveNext会在GetEnumerator没有的情况下返回错误?
这是因为接口IEnumerator<T>
没有MoveNext
的定义,即接口IEnumerator
。
例:
MethodInfo info1 = typeof(IEnumerator).GetMethod("MoveNext");
textBox1.Text += info1.ToString();
这样可以正常工作,
您可以循环分配给IEnumerator<T>
的接口并找到MoveNext
MethodInfo info1 = typeof(IEnumerator<int>).GetInterfaces()
.Where(i => i.GetMethod("MoveNext") != null)
.Select(m => m.GetMethod("MoveNext"))
.FirstOrDefault();
textBox1.Text += info1 != null ? info1.ToString() : string.Empty;
我看见了这个:
但第二个没有返回。
这意味着第二对的第二行,就像你试图这样做:
null.ToString();
这就是异常的来源,而不是它上面的那一行。 您不能使用这样的null对象的属性或方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.