【发布时间】:2017-12-29 05:30:41
【问题描述】:
我有一个方法:
public bool Exists(int levelId, string name, int excludeSubjectIdInCheck = 0)
{
return _context.Subjects.Any(subj => subj.LevelId == levelId
&& String.Equals(subj.Name, name, StringComparison.OrdinalIgnoreCase)
&& subj.DeletedAt == null
&& excludeSubjectIdInCheck != 0 ? subj.Id != excludeSubjectIdInCheck : true);
}
这一行的计算结果为真:
subj => subj.LevelId == levelId
这是假的:
String.Equals(subj.Name, name, StringComparison.OrdinalIgnoreCase)
这是真的:
subj.DeletedAt == null
这也是真的:
excludeSubjectIdInCheck != 0 ? subj.Id != excludeSubjectIdInCheck : true
但是,此方法返回 true。为什么是这样?我希望这将返回 false 给定 3 true 和 1 false。但是当我将最后一个条件用括号括起来时:
public bool Exists(int levelId, string name, int excludeSubjectIdInCheck = 0)
{
return _context.Subjects.Any(subj => subj.LevelId == levelId
&& String.Equals(subj.Name, name, StringComparison.OrdinalIgnoreCase)
&& subj.DeletedAt == null
&& (excludeSubjectIdInCheck != 0 ? subj.Id != excludeSubjectIdInCheck : true));
}
它返回假。但是如果我看一下,括号不应该有任何区别,因为它没有将任何条件分组。这段代码发生了什么?
【问题讨论】:
标签: c#