Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 快捷方式&;=表现得像&;不是,&;_C# - Fatal编程技术网

C# 快捷方式&;=表现得像&;不是,&;

C# 快捷方式&;=表现得像&;不是,&;,c#,C#,我使用的是C#6.0 VS2015;上面的代码触发空异常 &=运算符的行为类似于&运算符。我希望它的行为类似于&&,如果值已经为假,则跳过对右侧的求值(请参阅文章中“短路”行为的解释) 这种行为是故意的还是一个bug?请查看文档: x&=y 相当于x=x&y (…)运算符对整数操作数和布尔操作数执行位逻辑“与”运算 我想你是想避免空检查 下面的代码不会引发异常,因为您声明结果变量为假;在这种情况下,语言优化将使表达式短路,并且不会计算第二部分: public static void Main()

我使用的是C#6.0 VS2015;上面的代码触发空异常

&=
运算符的行为类似于
&
运算符。我希望它的行为类似于
&&
,如果值已经为假,则跳过对右侧的求值(请参阅文章中“短路”行为的解释)


这种行为是故意的还是一个bug?

请查看文档:

x&=y
相当于
x=x&y

(…)运算符对整数操作数和布尔操作数执行位逻辑“与”运算

我想你是想避免空检查

下面的代码不会引发异常,因为您声明
结果
变量为
;在这种情况下,语言优化将使表达式短路,并且不会计算第二部分:

public static void Main()
{
    var result = false;
    Xpto xpto = null;
    result &= xpto.Some;
}

public class Xpto
{
    public bool Some { get; set; }
}
如果你是一个在线人士,你可以通过写下以下内容来让事情变得更加一致:

result = result && xpto.Some;
或者,用简单的C#:


有人想把它翻译成英语吗?
对整型执行按位的
运算,对布尔型执行逻辑的
运算。@Eser看起来够英语的了。。。如果需要翻译-“为什么
&
to的行为不像
&
那样,而是像文档/C#规范中所述的
&
那样?”。如果
&
的行为类似于
&
,这是否令人惊讶?注意:无论对每个发布的代码使用
&=
&
,都会发生Null ref异常,因为
xpto
为Null。@Rahul,运行时优化将启动并跳过第二个术语的计算,因为
操作中带有
false
参数的任何内容都将导致
false
result@AlexeiLevenkov我对原来的问题做了一个激进的修改,所以如果我错了,请回复。我也知道按位和短路之间的区别,我假设OP试图使用短路形式,但他选择了错误的运算符。我编辑这个答案是为了反映你的想法concern@RubensFarias公平编辑。我已经回复了您的问题中的更改-检查它(即使编辑很难证明是一个好问题)短路不是一个“运行时优化”-术语表明短路是一个编译器可以做的事情,而另一个编译器不会。它是实现简洁性和原子性的语言保证,正如
&
保证始终计算两个操作数一样。不幸的是,
&=
存在,但不存在
&=
result = result && (xpto == null ? true : xpto.Some);
if (xpto != null)
   result = result && xpto.Some;