在自定义对象上使用 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"));
我有点摸不着头脑。
我有一个自定义对象,我正在尝试搜索以某些文本开头的 属性。
如果我使用 ==
而不是 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"));