2

我经常看到源代码中语言的关键字被替换为完整的类型名称: System.String,System.Int32System.GUID

此外,这样做的人到处都写完整的类型名称,使得源代码充满了这样的声明:

System.Collections.Generic.List<System.Reflection.PropertyInfo> list = System.Collections.Generic.List<System.Reflection.PropertyInfo>(newSystem.Reflection.PropertyInfo[] { ... });

当我问他们为什么这样做时,我得到了广泛的答案:“它可以帮助我避免类型名称冲突”、“它看起来更专业”、“我的 VS 插件会自动为我做”等等。

using我理解,如果您在整个源代码文件中使用一次类型,有时编写完整的类型名称可以帮助您避免编写不必要的内容。有时您需要显式声明一个类型,一个很好的例子是 ThreadingTimer和 WinForms Timer

但是,如果您源源不断地调用 DB 并且您仍然编写System.Data.SqlClient.SqlCommand而不是“SqlCommand”,那么它对我来说看起来有点奇怪。

你怎么看?我是对的还是我只是不明白什么?

谢谢!

PS 还有一个现象是写if (0 != variable)而不是if (variable != 0)

4

7 回答 7

6

if (0 == variable)事情是用于防止意外写入的 C++ 约定,if (variable = 0)这在 C++ 中有效,但不符合预期。它在 C# 中完全没有必要,因为错误的版本无法编译,因此您应该使用其他版本,因为它读起来更好。

就我个人而言,我喜欢尽可能少地写,所以除非有命名空间冲突,否则我永远不会完全限定事物。

至于stringvs String,我总是使用别名(string/ int)而不是完整的类名,但它纯粹是一个约定 - 没有运行时差异。

于 2010-10-01T09:59:29.423 回答
2

我强烈反对“它看起来更专业”,坦率地说,它看起来与我相反。

也就是说,如果我要在整个源文件中使用命名空间的单个成员,我可能会在那里使用全名而不是using.

偏爱等确实有一些0 != x优势x != 0,这取决于对等价的覆盖和其他一些事情。这在其他一些语言中更常见,因此可能是一种宿醉。看到人们喜欢将 null 放在首位是特别常见的,因为这样就不太可能变成将 null 传递给相等覆盖(同样,在其他语言中更常见的是一个真正的问题)。它还可以避免由于拼写错误而导致的意外分配,尽管这在 C# 中也很少出现(除非您使用的类型是 bool)。

于 2010-10-01T10:25:07.430 回答
1

这有点主观,但除非您的编码标准另有说明,否则我认为删除命名空间总是更好,因为它不那么冗长并且更容易阅读。如果存在命名空间冲突,请使用更短的别名来表示某种含义。

至于你的最后一点,如果你比较 name.Equals("Paul") 与 "Paul".Equals(name)。除非名称为空,否则它们都做同样的事情。在这种情况下,第一个失败并出现空异常,而第二个(正确?)返回 false。

于 2010-10-01T10:02:29.963 回答
1

对于原始数据类型:这里有重复的问题 - C#、int 还是 Int32?我应该关心吗?

对于非原始数据类型:给出的答案是有效的,尤其是“它有助于避免类型名称冲突”

For if (0 != variable): 变量是表达式中要比较的对象,它应该先行。所以,我更喜欢if (variable != 0).

于 2010-10-01T10:04:07.717 回答
1

我认为这些理由中的任何一个都不能令人信服。添加 using 语句更好。

两个小例外:

  • 在生成的代码中,您可能会看到多余的命名空间前缀,但这没关系,因为此代码没有缩进编辑。
  • 有时,Int32当依赖于恰好是 32 位的类型时,显式编写会很有帮助。
于 2010-10-01T10:06:05.777 回答
1

使代码尽可能可读!另见:http ://en.wikipedia.org/wiki/KISS_principle

“它看起来很专业”是一个非常糟糕的论点。

顺便说一句,如果您的代码中充满了 SQL 语句,那么您可能还是想重构它。

于 2010-10-01T10:15:04.180 回答
1

关于字符串与字符串。我尝试使用string, 当它是这样时,即任何编程语言中的字符串。但是当它是一个对象(或者我指的是 String 类)时,我尝试使用String.

于 2010-10-01T10:22:19.107 回答