序列不包含元素错误,但我想检查 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章