症状
某方法抛出 ArgumentNullException 并指明一个调用方以为已设置的参数。被报告的参数可能离 null 真正的来源很远。
诊断
借助参数名向前回溯:
public void Send(IMessenger messenger) {
ArgumentNullException.ThrowIfNull(messenger); // fails here
}
启用可空类型可在编译期捕获此类问题。
修复
在边界做守卫并启用可空性:
#nullable enable
public sealed class Client {
public Client(HttpClient http) {
ArgumentNullException.ThrowIfNull(http);
_http = http;
}
private readonly HttpClient _http;
}
在启动时校验配置。
验证
接线完成后重跑,不再出现 ArgumentNullException。补一个传入 null 的测试,断言守卫抛出且参数名正确。