如何解决 C# 中 linq 的 lambda 表达式中的对象引用错误?
Posted
技术标签:
【中文标题】如何解决 C# 中 linq 的 lambda 表达式中的对象引用错误?【英文标题】:How to resolve object reference error in lambda expression of linq in c#? 【发布时间】:2020-01-14 16:11:28 【问题描述】:我正在开发 WPF 应用程序。我正在尝试根据所需条件从列表中获取记录。但是当没有找到任何记录时,它会给我找不到对象引用错误。
var recordList = _outputVariables.ToList().Where(X => X.symbolName == _symbolName).ToList();
if (recordList != null)
//more coding...
如代码中所示,当 _outputVariables 根据 _symbolName 没有任何记录匹配时,它会给出 Object reference not set to an instance of an object.'
和 X was null.
的错误。那么我该如何处理这个问题呢?请帮忙。
【问题讨论】:
.Where(X => X?.symbolName == _symbolName)
或 .Where(X => X!= null && X.symbolName == _symbolName)
什么是record1
?
Where(X => (X.symbolName != null) && (X.symbolName == _symbolName))
对不起写错了,其实record1是recordList
【参考方案1】:
使用 C#6 中引入的空条件运算符(并且不要多次调用 ToList()
):
var recordList = _outputVariables?.Where(X => X?.symbolName == _symbolName).ToList();
if (recordList != null)
//more coding...
【讨论】:
_outputVariables 正在从其他方法操作,也用于插入和删除操作。因此,如果我没有使用 _outputVariables 提及 ToList,那么它会显示错误,例如 List 已修改。所以我在那里使用 ToList 和 _outputVariables。如果我可以更好地修改它,我想在这里提出建议? @HardikRPatel:如果“其他方法”表示“其他线程”,您应该同步对列表的访问。致电ToList
无济于事。【参考方案2】:
var recordList = _outputVariables.ToList().Where(X => X.symbolName == _symbolName).ToList();
您当前循环通过_outputVariables
,但如果是null
,则会出现错误,因为null
没有.ToList()
。所以你应该在你的_outputVariables
之后添加一个?
,这样当它为空时它会返回null
而不是异常。
X
也是如此。如果X
是null
并且您尝试获取属性symbolName
,则会收到错误消息,因为null
没有名为symbolName
的属性。所以你也想在这里添加一个?
。所以它会返回null
而不是异常。
留给你:var recordList = _outputVariables?.ToList().Where(X => X?.symbolName == _symbolName).ToList();
【讨论】:
【参考方案3】:你也可以像下面这样使用
if (_outputVariables != null && _outputVariables.Count > 0)
var recordList = _outputVariables.Where(X => X != null && !string.IsNullOrEmpty(X.symbolName) && X.symbolName == _symbolName);
【讨论】:
如果X
为空,则会抛出此错误。
@Ajax:如果X
是null
,它仍然会抛出,而现在你调用ToList()
不止两次而是三次......
@mm8 现在可以了吗?我也测试过它。我只是想用正常的方式来做【参考方案4】:
你可以试试这个
if(_outputVariables!=null)
var recordList = _outputVariables.Where(X => X.symbolName ==_symbolName).ToList();
if (recordList != null)
//more coding...
【讨论】:
以上是关于如何解决 C# 中 linq 的 lambda 表达式中的对象引用错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 LINQ 和 Lambda 表达式 LINQ C# 上正确执行 SQL 查询