一个新手的很水的问题 C#在做if判断的时候,例如要判断变量a是否等于0 if( a == 0 )和 if( 0 == a) 在代码执行效率上是否有分别? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没有吧,有的话也是几乎可以忽略的,if语句貌似就不在时间复杂度O的度量里 看了c#的汇编代码 if (a==0)00000044 cmp dword ptr [ebp-44h],0 00000048 setne al 0000004b movzx eax,al 0000004e mov dword ptr [ebp-48h],eax 00000051 cmp dword ptr [ebp-48h],0 00000055 jne 00000063 if (0==a)00000044 cmp dword ptr [ebp-44h],0 00000048 setne al 0000004b movzx eax,al 0000004e mov dword ptr [ebp-48h],eax 00000051 cmp dword ptr [ebp-48h],0 00000055 jne 00000063 没看出区别 恩,我好感动啊,这张帖子是我注册CSDN以来,回复人数最多的帖子了,感激涕零啊~ 不过我基本明白了,if(0 == a)的操作效率比较高,恩,具体原因需要去看汇编,虽然我也懂点汇编的东西,但是不怎么在行,具体原因我也就不想了,反正对我来说,知道 if( 0 == a)效率高,在使用的时候已经足够了,谢谢大家帮忙解惑 if( 0 == a)一般建议使用这个, 这样当你不小心将 == 写成 = 时, 会生成编译错误. 而如果使用前一个, 则就成了软件中的一个Bug. 那如果我比较的两者不是int型的参数,而是object呢?例如 if( null == a) 和 if( a == null)两者的性能也是相同的么? if (a==null)00000044 cmp dword ptr [ebp-44h],0 00000048 setne al 0000004b movzx eax,al 0000004e mov dword ptr [ebp-48h],eax 00000051 cmp dword ptr [ebp-48h],0 00000055 jne 00000063 if (null==a)00000044 cmp dword ptr [ebp-44h],0 00000048 setne al 0000004b movzx eax,al 0000004e mov dword ptr [ebp-48h],eax 00000051 cmp dword ptr [ebp-48h],0 00000055 jne 00000063 这是个编程好习惯,c#要是将if(i==0)写成if(i=0)编译是通不过的,但是写js或C的人知道这两种写法都不会出错所以一般写成if(0==i) 谁说的,在C#中写成a=0也会编译时也会报错,好不好?不知道你有没有写过C#,在C中好像编译时才不会报错。 if(0==a)这种写法只常见于C++中,C#中并不常见if(a==0)和if(0==a)效率是完全一样的只所以会出现if(0==a)的写法是因为在C++中,a=0也可以认为是个Boolean值。因此很多人因为不小心少写了一个=号,导到逻辑错误,因此有了 0写在前,这样的话,在编译的时候就会发现这个错误而在C#中,if(a=0)的语法是不允许出现的。因此在C#中。很少人写成0==a因为不习惯 bdmh 贴了两遍汇编代码, 都是一样的, 就是没有一个人看到, 还在说需要看汇编 顶!我就很不习惯if(0==a)这种写法 非常赞同,我用C#,从来就不做if(0==a)这类的 从汇编代码来看,两者基本没什么差别因此考虑为了程序的可读性或者说读程序的习惯最好还是用 if(a==0) 吧 一样的。在C下,少写了一个等号后,if(0=a)可以报错,if(a=0)不报错。C# if(a=0)也报错 bdmh 贴出来的汇编代码是一样的,效率应该也一样有区别的话,可能存在于编译器在编译的时候 winform TreeList 节点图片问题 c# 将文件存入sql然后再取出来,为什么取出后文件无法打开? 求个调试小工具或者调试方法 关于windows窗体中的treeview的一个普遍的问题 有没有办法改变MdiContainer窗体那黑黑的背景??? 请问在winform中如何调用axWebBrowser1中的网页内javascript函数啊? 那位大虾帮忙解释一下C#中Rondom的用法 c#对access数据库的访问!!! 关于调用DLL后的程序打包的问题 请问怎样用C#创建一个存储过程 xmpp通过iq传送类 老话重提,datagridview如何去掉单元格里面的空格?
00000044 cmp dword ptr [ebp-44h],0
00000048 setne al
0000004b movzx eax,al
0000004e mov dword ptr [ebp-48h],eax
00000051 cmp dword ptr [ebp-48h],0
00000055 jne 00000063
if (0==a)
00000044 cmp dword ptr [ebp-44h],0
00000048 setne al
0000004b movzx eax,al
0000004e mov dword ptr [ebp-48h],eax
00000051 cmp dword ptr [ebp-48h],0
00000055 jne 00000063
没看出区别
不过我基本明白了,if(0 == a)的操作效率比较高,恩,具体原因需要去看汇编,虽然我也懂点汇编的东西,但是不怎么在行,具体原因我也就不想了,反正对我来说,知道 if( 0 == a)效率高,在使用的时候已经足够了,谢谢大家帮忙解惑
一般建议使用这个, 这样当你不小心将 == 写成 = 时, 会生成编译错误. 而如果使用前一个, 则就成了软件中的一个Bug.
if (a==null)
00000044 cmp dword ptr [ebp-44h],0
00000048 setne al
0000004b movzx eax,al
0000004e mov dword ptr [ebp-48h],eax
00000051 cmp dword ptr [ebp-48h],0
00000055 jne 00000063 if (null==a)
00000044 cmp dword ptr [ebp-44h],0
00000048 setne al
0000004b movzx eax,al
0000004e mov dword ptr [ebp-48h],eax
00000051 cmp dword ptr [ebp-48h],0
00000055 jne 00000063
这是个编程好习惯,c#要是将if(i==0)写成if(i=0)
编译是通不过的,但是写js或C的人知道这两种写法都不会出错
所以一般写成if(0==i)
谁说的,在C#中写成a=0也会编译时也会报错,好不好?不知道你有没有写过C#,在C中好像编译时才不会报错。
顶!我就很不习惯if(0==a)这种写法
非常赞同,我用C#,从来就不做if(0==a)这类的
因此考虑为了程序的可读性或者说读程序的习惯最好还是用 if(a==0) 吧
一样的。在C下,少写了一个等号后,if(0=a)可以报错,if(a=0)不报错。C# if(a=0)也报错