C# 使用LINQ的NullReferenceException
我很难让linq线路正常工作C# 使用LINQ的NullReferenceException,c#,linq,if-statement,C#,Linq,If Statement,我很难让linq线路正常工作 var result = databaseObjects.Where(dbo => dbo.GetType() == typeof(Model.DatabaseTable) ? (dbo as Model.DatabaseTable).FullName.Equals(name) : dbo.Name.Equals(name)); 我试着用这个方法来解决这个问题。 我想我知道错在哪里了,DatabaseObject是一个抽象类,我想避免在DatabaseTab
var result = databaseObjects.Where(dbo => dbo.GetType() == typeof(Model.DatabaseTable) ? (dbo as Model.DatabaseTable).FullName.Equals(name) : dbo.Name.Equals(name));
我试着用这个方法来解决这个问题。
我想我知道错在哪里了,DatabaseObject是一个抽象类,我想避免在DatabaseTable之外的任何东西上使用FullName属性,但从我所看到的情况来看,它确实检查了它
编辑:错误是:
System.NullReferenceException was unhandled
{"Object reference not set to an instance of an object."}
问题是我忘了分配DatabaseObject.Name,已分配DatabaseTableObject.FullName。在您的一个dbo对象上,似乎
FullName
或Name
为null
。要验证,请将代码更改为:
var result = databaseObjects.Where(dbo => dbo.GetType() == typeof(Model.DatabaseTable) ? (dbo as Model.DatabaseTable).FullName == name : dbo.Name == name);
它不应该引发异常。看起来好像在一个dbo对象上
FullName
或Name
为null
。要验证,请将代码更改为:
var result = databaseObjects.Where(dbo => dbo.GetType() == typeof(Model.DatabaseTable) ? (dbo as Model.DatabaseTable).FullName == name : dbo.Name == name);
它不应该抛出异常。我知道在堆栈溢出的维护过程中发现:)在此之前想将问题拉下来,但速度太慢。无论如何,谢谢你留下这个问题,它可能会帮助别人。我甚至建议更新问题以显示您收到的错误消息。我知道在堆栈溢出的维护过程中发现:)在此之前想将问题向下拉,但速度太慢。无论如何,谢谢你留下这个问题,它可能会帮助别人。我甚至建议更新问题以显示您收到的错误消息。我忘了在DatabaseTable以外的对象上指定名称,这是一个愚蠢的错误,我一直在查看linq表达式,这没有错:)我忘了在DatabaseTable以外的对象上指定名称,这是一个愚蠢的错误,我一直在研究linq的表情,这并没有错:)