【发布时间】:2018-10-22 08:42:13
【问题描述】:
这个话题讨论过很多次了,很清楚:Is relying on && short-circuiting safe in .NET?
如果在if子句的右侧部分使用out参数时短路也可靠,我找不到明确的答案:
int foo;
....
if ( false == Int32.TryParse( bar, out foo ) || 0 == foo )
当我尝试这段代码时,它就可以工作了。但是我有点担心这种行为是否可靠,因为我不知道编译器是如何翻译代码并访问foo的。
我的问题:
对foo 的访问是否真的在之后 TryParse 完成,它会考虑任何更改的值,或者编译器有时可以读取值之前 TryParse [由于一些优化] 因此我不能依赖此代码。
【问题讨论】:
-
除非 C# 编译器有错误,否则它会工作,如果变量在分配之前被访问,那么编译器会抱怨它。
-
@Steve 第二个条件非常必要什么时候可以成功解析。