【问题标题】:Sequence contains no elements error but I want to check for null [duplicate]序列不包含元素错误,但我想检查 null [重复]
【发布时间】: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)。

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

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

【问题讨论】:

    标签: c# asp.net-mvc linq


    【解决方案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);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-21
          • 1970-01-01
          • 2012-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多