繁体   English   中英

如何解决 C# 中 linq 的 lambda 表达式中的对象引用错误?

[英]How to resolve object reference error in lambda expression of linq in c#?

我正在研究 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.'错误Object reference not set to an instance of an object.' X was null. . 那么我该如何处理这个问题呢? 请帮忙。

使用 C#6 中引入的空条件运算符(并且不要多次调用ToList() ):

var recordList = _outputVariables?.Where(X => X?.symbolName == _symbolName).ToList();
if (recordList != null)
{
    //more coding...
}

你也可以像下面一样使用

 if (_outputVariables != null && _outputVariables.Count > 0)
            {
               var recordList = _outputVariables.Where(X => X != null && !string.IsNullOrEmpty(X.symbolName) && X.symbolName == _symbolName);

            }

var recordList = _outputVariables.ToList().Where(X => X.symbolName == _symbolName).ToList();

您当前循环遍历_outputVariables ,但如果它为null则会出现错误,因为null没有.ToList() 所以你应该添加一个? 在您的_outputVariables ,因此当它为空时它将返回null而不是异常。

X 如果Xnull并且您尝试获取属性symbolName ,则会出现错误,因为null没有名为symbolName的属性。 所以你想添加一个? 这里也。 所以它将返回null而不是异常。

var recordList = _outputVariables?.ToList().Where(X => X?.symbolName == _symbolName).ToList();你: var recordList = _outputVariables?.ToList().Where(X => X?.symbolName == _symbolName).ToList();

你可以试试这个

if(_outputVariables!=null)
{
var recordList = _outputVariables.Where(X => X.symbolName ==_symbolName).ToList();
}
if (recordList != null)
{
       //more coding...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM