为什么这两行程序NullPointerException?

时间:2011-03-25 21:44:07

标签: c#

class Program
{
    static void Main(string[] args)
    {
        Func<Object> someMethod = new Func<Object>(((Object)null).ToString);
        String nameOfMethod = someMethod.Method.Name;
    }
}

我不确定为什么 someMethod 函数的主体会执行。

3 个答案:

答案 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的原因。