为什么更&&喜欢&和||更喜欢|?
我问过多年来一直在编程的人,他的解释是:
例如,在中if (bool1 && bool2 && bool3) { /*DoSomething*/ },bool1必须是真实的,以便bool2在继续之前测试哪个必须为真bool3,等等.如果我使用单个&而不是测试的顺序,即使所有这些都必须是真的进展到下一行,为什么它至关重要?
注意:我想指出我是幼儿的编程,这不是一个严肃或紧迫的问题.更重要的是理解为什么事情应该以某种方式而不是另一种方式完成.
如果我有一段用C#编写的代码包装在一个#if指令中,那么什么(如果有的话)优先权应用于可能在该指令中使用的任何布尔运算符?
换一种说法:
#if DEBUG || MYTEST && PLATFORM_WINDOWS
// ... Some code here
#endif
Run Code Online (Sandbox Code Playgroud)
这将简单地从左到右评估为
#if (DEBUG || MYTEST) && PLATFORM_WINDOWS
Run Code Online (Sandbox Code Playgroud)
同样,愿意
#if PLATFORM_WINDOWS && DEBUG || MYTEST
Run Code Online (Sandbox Code Playgroud)
被评估为
#if (PLATFORM_WINDOWS && DEBUG) || MYTEST
Run Code Online (Sandbox Code Playgroud)
或者&& vs ||有一些优先顺序吗?
编辑:要清楚,我很清楚我可以自己运行代码来测试它,而且我有.我正在寻找一个给我正式的答案 - 对文档等的参考,这可以让我更深入地理解指令的基本机制.我想知道是否存在特定的预期行为,或者这是否纯粹是未定义的行为.
今天大家好,我正在努力制作API.当我看到C#编译器的不同行为时,我感到很困惑.让我解释:
我得到例外:
If(userLoginModel.UserId>0)
{
//do something
}
else{
//do something
}
Run Code Online (Sandbox Code Playgroud)
例外:{"对象引用未设置为对象的实例."}
是的它是空的; 但如果写:
if (userLoginReturnModel != null && userLoginReturnModel.UserId >0)
{
//do something
}
else
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
此代码没有抛出任何异常.
注意:我的问题是为什么编译器没有在第二个代码上抛出任何异常,因为如果存在&& condition,当编译器检查userLoginReturnModel.userId> 0时,那么这也需要抛出异常,因为object为null.而且我们知道两种情况都会被检入.任何答案都有很好的解释.
c# exception-handling compiler-errors nullreferenceexception