序列不包含元素错误,但我想检查 null [重复]

Posted

技术标签:

【中文标题】序列不包含元素错误,但我想检查 null [重复]【英文标题】:Sequence contains no elements error but I want to check for null [duplicate] 【发布时间】:2009-06-03 00:21:40 【问题描述】:

我有以下问题:

public Boolean Exists(String userName)

    IRepository<User> = new UserRepository();
    User user = userRepository.First(u => u.Name == userName);

    if (user == null) return false;

    // Exists!
    return true;

现在的问题是,我无法检查用户对象是否为空。在我到达那里之前,我收到了一个 InvalidOperationException,上面写着“序列不包含任何元素”。

这对我来说真的很奇怪,特别是因为我不想建立带有异常的控制流(例如,封装在 try..catch 中并在相应的部分返回 true/false)。

这里发生了什么?这是正常的还是我的存储库有问题(提示?!)

顺便说一句,当我要查找的元素存在(检索用户等)时,此代码完美工作。只有在没有匹配的时候才不起作用。

【问题讨论】:

【参考方案1】:

使用 FirstOrDefault 而不是 First。这将在面对空集合时返回 null。

IRepository<User> = new UserRepository();
User user = userRepository.FirstOrDefault(u => u.Name == userName);

【讨论】:

@Tomas,我实际上比你抢到了,但我做了一个帖子回答编辑,实际上包含了一个代码示例。第二次编辑落后 2 秒 :) 这是真的,Jared 是第一个 :D(2 秒.. 它显示 Jared 48 秒前和 Tomas 46 秒前)。谢谢各位大佬!!!【参考方案2】:

尝试将.First() 更改为.FirstOrDefault()

【讨论】:

【参考方案3】:

使用.FirstOrDefault() 来防止该错误

【讨论】:

【参考方案4】:

FirstOrDefault 非常重要。但是为了你的具体使用,你也可以说Any

public bool Exists(string userName)

    IRepository<User> userRepository = new UserRepository();
    return userRepository.Any(u => u.Name == userName);

【讨论】:

以上是关于序列不包含元素错误,但我想检查 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章

序列不包含元素错误 - MVC(模型和数据访问)

检查是不是为 Null [重复]

依次检查长度 >= N 的重复子序列

如何检查数组是不是包含元素[重复]

检查数组元素是不是包含其他数组中的部分值[重复]

Python错误为不同循环设置具有序列的数组元素[重复]