bin*_*all 37 c# code-analysis stylecop rules
没有在StyleCop帮助手册中找到它,在SO和Google上,所以这里是;)
在StyleCop使用期间,我有一个警告:
SA1121 - UseBuiltInTypeAlias - 可读性规则
代码使用其中一种基本C#类型,但不使用该类型的内置别名.
不应使用类型名称或完全限定类型名称,应始终使用这些类型的内置别名:bool,byte,char,decimal,double,short,int,long,object,sbyte,float,string ,ushort,uint,ulong.
所以String.Empty是错的(取决于上述规则)并且string.Empty是好的.
为什么使用内置别名更好?可以String. Int32,Int64(等)在特殊情况下的代码中复杂化吗?
And*_*ykh 57
只是为了澄清:并非每个人都同意StyleCop的作者.Win32和.NET大师Jeffrey Richter在他的优秀书籍CLR中通过C#写道:
C#语言规范指出,"作为一种风格问题,使用关键字比使用完整的系统类型名称更受青睐."我不同意语言规范; 我更喜欢使用FCL类型名称并完全避免基本类型名称.实际上,我希望编译器甚至不提供原始类型名称,并强迫开发人员使用FCL类型名称.这是我的理由:
我看到许多开发人员感到困惑,不知道是否在他们的代码中使用字符串 或字符串.因为在C#string(一个关键字)中精确映射到 System.String(一种FCL类型),所以没有区别,任何一种都可以使用.类似地,我听说有些开发人员说当应用程序在32位操作系统上运行时,int表示32位整数,当应用程序在64位操作系统上运行时,它表示64位整数.这句话绝对是错误的:在C#中,int总是映射到System.Int32,因此它表示一个32位整数,而不管代码运行的操作系统如何.如果程序员在他们的代码中使用Int32,那么这种潜在的混淆也会被消除.
在C#中,长映射到System.Int64,但是在不同的编程语言中,long 可以映射到Int16或Int32.实际上,C++/CLI确实将long视为Int32.如果某人使用一种语言阅读源代码,如果他或她习惯于使用不同的编程语言进行编程,则很容易误解代码的意图.实际上,大多数语言甚至不会将long视为关键字,也不会编译使用它的代码.
FCL有许多方法,它们将类型名称作为其方法名称的一部分.例如,BinaryReader类型提供诸如ReadBoolean,ReadInt32, ReadSingle等方法,而System.Convert类型提供诸如 ToBoolean,ToInt32,ToSingle等方法.虽然编写下面的代码是合法的,但浮点线对我来说感觉非常不自然,并且线条不正确并不明显:
Run Code Online (Sandbox Code Playgroud)BinaryReader br = new BinaryReader(...); float val = br.ReadSingle(); // OK, but feels unnatural Single val = br.ReadSingle(); // OK and feels good许多使用C#的程序员都倾向于忘记可以使用其他编程语言来对抗CLR,因此,C#-isms会进入类库代码.例如,微软的FCL几乎全部用C#编写,FCL团队的开发人员现在已经在库中引入了方法,例如 Array的GetLongLength,它返回一个在C#中很长的Int64值,但在其他语言中却没有(比如C++)/CLI).另一个例子是System.Linq.Enumerable的 LongCount方法.
Jon*_*eet 20
它将如果你有你自己的代码只有真正复杂String,Int32等被使用,而不是它可能最终类型System.*-请不要这么做!
最终,这是个人偏好.我到处都使用别名,但我知道有些人(例如Jeffrey Richter)建议永远不要使用它们.保持一致可能是一个好主意,就是这样.如果您不喜欢StyleCop规则,请将其禁用.
请注意,方法等的名称应使用框架名称而不是别名,以便与语言无关.这对私人/内部成员来说并不那么重要,但您可能对私有方法的规则与公共方法的规则相同.
| 归档时间: |
|
| 查看次数: |
10520 次 |
| 最近记录: |