【发布时间】:2017-03-12 22:53:21
【问题描述】:
我在尝试使用 linq 访问不存在的 XML 元素时收到以下错误:
“System.NullReferenceException”类型的第一次机会异常 发生在 Test.exe System.NullReferenceException: Object reference 未设置为对象的实例。
bool exists = website.Parent
.Element("Exclusions")
.Elements("Exclusion")
.Where(x => thisKeyword.ToUpper().Contains((string)x.Value.ToUpper() ?? "~"))
.Any();
我可以通过简单地使用.Where(x => thisKeyword.Contains((string)x))来解决这个问题
但我需要将thisKeyword 和 XML 元素值(如果存在)都转换为大写,以便进行不区分大小写的比较。
我的印象是?? "~" 的意思是“如果左边是空的,则使用右边的。所以在这种情况下,x 应该变成波浪号,因此不能针对 thisKeyword 进行验证(因为它永远不会包含波浪号)。我同意这种粗略的方法……但它甚至不起作用。
如何防止出现 NullReferenceException?
【问题讨论】:
-
看看什么是null,thisKeyword,x,或者x.Value会杀了你。必须先做一个空检查。
-
我认为您可以使用以下代码
thisKeyword?.ToUpper().Contains((string)x?.Value.ToUpper() ?? "~")来检查两者都不为空