我读到.NET中的AND运算符&&
有条件地计算它的第二个参数。
检查null是否安全,然后检查单个语句中的某些字段?
例如,假设我们有一个SomeClass类,它有一个整数字段Id:
class SomeClass
{
public Int32 Id { get; set; }
}
然后,我们在某处收到此类型的对象并尝试对其执行某些操作:
public void SomeMethod(SomeClass obj)
{
if (obj != null)
if (obj.Id == 1)
{
// do some actions
}
}
我们可以按如下方式重写,以减少代码量吗?无效检查是否安全?
public void SomeMethod(SomeClass obj)
{
if (obj != null && obj.Id == 1)
// do some actions
}
答案 0 :(得分:7)
是的,它是安全的,&&条件从“从左到右”处理,如果第一个在您的情况下不匹配,则第二个不会被评估
操作
x&& ÿ
对应于操作
x& ÿ
除了如果x为假,则不评估y,因为结果为 无论y的值是什么,AND操作都是假的。这是 被称为“短路”评估。
答案 1 :(得分:3)
是的,这绝对是安全的。
正如您在问题中所述,如果对象为null,则仅计算第一个条件,因此永远不会执行第二个条件(会引发NullReferenceException)。这也被称为“短路”逃避。
答案 2 :(得分:1)
是的......这在C#和许多其他语言中是安全的。如果程序知道以下检查不能使整个if语句变为真,则甚至不需要查看它们。
此类评估称为Lazy Evaluation。
答案 3 :(得分:1)
这里的术语是"short-circuit"。使用和(&&)
运算符,如果第一个条件失败,它将不会继续下一个条件。他们这样做的方式不仅仅是保存它是正确的方法。
7.11 Conditional logical operators - C# Reference MSDN
&&和||运算符称为条件逻辑运算符。 它们也被称为“短路”逻辑运算符。
答案 4 :(得分:1)
是的,这就是简单的逻辑,如果在几个AND语句中,一个是假的,则不需要继续评估它们,因为结果将为FALSE,因此编译器在找到第一个FALSE时停止评估