我经常看到源代码,其中language的关键字被完整的类型名称替换:
System.String
,System.Int32
,System.GUID
等
此外,执行此操作的人在任何地方都会写出完整的类型名称,这使得源代码充满了这样的声明:
System.Collections.Generic.List<System.Reflection.PropertyInfo> list = System.Collections.Generic.List<System.Reflection.PropertyInfo>(newSystem.Reflection.PropertyInfo[] { ... });
当我问他们为什么这样做时,我得到了广泛的答案:“这有助于我避免类型名称冲突”,“它看起来更专业”,“我的VS插件自动为我做”等。< / p>
据我所知,如果您在整个源代码文件中使用类型一次,有时编写完整类型名称可以帮助您避免编写不必要的using
。有时您需要明确声明一个类型,一个很好的例子是线程Timer
和WinForms Timer
。
但是如果你完整的数据库调用来源,你仍然写System.Data.SqlClient.SqlCommand
而不是'SqlCommand',对我来说这看起来有点奇怪。
谢谢!
P.S。另一种现象是写if (0 != variable
)而不是if (variable != 0)
。
答案 0 :(得分:6)
if (0 == variable)
是一个C ++约定,用于防止意外编写if (variable = 0)
,这在C ++中是有效的,但不能达到预期效果。它在C#中完全不必要,因为错误的版本无法编译,所以你应该使用其他版本,因为它读得更好。
就个人而言,我喜欢尽可能少地写作,所以除非有命名空间冲突,否则我永远不会完全符合条件。
对于string
vs String
,我总是使用别名(string
/ int
)而不是完整的类名,但它纯粹是一种惯例 - 有没有运行时差异。
答案 1 :(得分:2)
我坚决反对“它看起来更专业”,坦白说它看起来与我相反。
也就是说,如果我要在整个源文件中使用命名空间的单个成员,我可能会在那里使用全名而不是using
。
支持0 != x
超过x != 0
等确实有一些优势,取决于等于和其他一些事情的覆盖。在其他一些语言中更常见,因此可能是宿醉。特别常见的是人们倾向于首先将null放在首位,因为这种方式不太可能变为将null传递给相等覆盖(同样,在其他语言中更常见的是真正的问题)。它也可以避免由于拼写错误而意外分配,但在C#中这很少是一个问题(除非您使用的类型是bool)。
答案 2 :(得分:1)
这有点主观,但除非您的编码标准另有说明,否则我认为删除命名空间总是更好,因为它不那么宽松,便于阅读。如果存在名称空间冲突,请使用较短的别名,这意味着什么。
关于你的最后一点,如果你比较name.Equals(“Paul”)和“Paul”.Equals(name)。除非name为null,否则它们都会做同样的事情。在这种情况下,第一个失败,出现空异常,而第二个(正确?)返回false。
答案 3 :(得分:1)
对于原始数据类型:此处有重复的问题 - C#, int or Int32? Should I care?
对于非原始数据类型:给出的答案是有效的,尤其是“它有助于避免类型名称冲突”
对于if (0 != variable)
:变量是要在表达式中进行比较的主题,它应该先行。所以,我更喜欢if (variable != 0)
。
答案 4 :(得分:1)
我没有发现任何令人信服的理由。添加using语句更好。
两个小例外:
Int32
是有帮助的。 答案 5 :(得分:1)
使代码尽可能可读!另见:http://en.wikipedia.org/wiki/KISS_principle
“它看起来很专业”是一个非常糟糕的论点。
顺便说一句,如果您的代码中充满了SQL语句,那么您可能还想重构它。
答案 6 :(得分:1)
关于string vs String。我尝试使用string
,就像在任何编程语言中一样使用字符串。但是当它是一个对象(或者我指的是String类)时,我尝试使用String
。