在自定义对象上使用 Find 时出现空引用异常

Null reference exception when using Find on custom object

我有点摸不着头脑。

我有一个自定义对象,我正在尝试搜索以某些文本开头的 属性。

如果我使用 == 而不是 StartsWith 搜索 属性,它不会出错。

这个有效

Server serverObject = ServerObjectList.Find(n => n.Name == "Server001");

这给出了空引用异常

Server serverObject = ServerObjectList.Find(n => n.Name.StartsWith("Server001"));

奇怪的是,如果第一个对象是您要查找的对象,它就会起作用。

您的 "ServerObjectList" 列表可能是空的。起初它可能正在评估 null == "" ,这给出了 false。在第二条语句中,您在 null 上调用 StartsWith 函数,这会产生 nullrefrenceexception。检查列表是否已经有数据。

注意:== 运算符对字符串重载。这可能在返回 false 之前进行空检查。

您应该这样做,因为 n 可能为 null 或 Name 可能为 null:

Server serverObject = ServerObjectList.Find(n => n!=null && n.Name!=null && n.Name.StartsWith("Server001"));