class Program
{
static void Main(string[] args)
{
Func<Object> someMethod = new Func<Object>(((Object)null).ToString);
String nameOfMethod = someMethod.Method.Name;
}
}
我不确定为什么 someMethod 函数的主体会执行。
答案 0 :(得分:5)
Func<Object> someMethod = new Func<Object>(((Object)null).ToString);
它没有执行,但您尝试在空引用上访问方法 ToString()
。
答案 1 :(得分:2)
此代码编译为ldnull
后跟ldvirtftn
指令。来自ECMA-335的ldvirtftn
(4.18):
System.NullReferenceException是 如果object为null则抛出。
您没有调用ToString,但ldvirtftn
指令尝试将ToString的函数指针加载到评估堆栈中。为此,它需要一个有效的对象引用。
答案 2 :(得分:1)
(Object)null仍然只是null。您正在尝试调用null.ToString(),这就是您获取NullPointerException的原因。