You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用Func<T>时加()触发NullReferenceException,不加则无异常?

委托调用与直接赋值的差异解析

首先明确:Func<string>是一个委托类型,未初始化的委托变量默认值为null(因为委托属于引用类型)。

情况1:var func = GetFunc();

这里的()是执行委托指向的方法的操作。此时GetFunc是null,相当于你试图调用一个根本不存在的方法——委托实例本身都没指向任何有效方法,自然会触发NullReferenceException。就像拿一个空遥控器按按钮,根本没有设备能响应这个操作。

情况2:var func = GetFunc;

这里只是把委托变量本身的值拷贝给另一个变量,本质是传递引用。GetFunc的值是null,那func也会被赋值为null,这个过程只是变量间的赋值操作,没有尝试执行任何方法,所以不会抛出异常。就像把空遥控器递给别人,只是传递了这个空物件,没有按按钮的动作,自然不会有错误。

内容的提问来源于stack exchange,提问作者Manikanda Akash M

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:50:55