筛选过的 Code rule
Microfost.Design
CA1001:具有可释放字段的类型应该是可释放的
using System;
using System.IO;
namespace DesignLibrary
{
// This class violates the rule.
public class NoDisposeMethod
{
FileStream newFile;
public NoDisposeMethod()
{
newFile = new FileStream(@"c:\temp.txt", FileMode.Open);
}
}
// This class satisfies the rule.
public class HasDisposeMethod: IDisposable
{
FileStream newFile;
public HasDisposeMethod()
{
newFile = new FileStream(@"c:\temp.txt", FileMode.Open);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// dispose managed resources
newFile.Close();
}
// free native resources
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
CA1008:枚举应具有零值
CA1011:考虑将基类型作为参数传递
CA1016:用 AssemblyVersionAttribute 标记程序集
CA1017:用 ComVisibleAttribute 标记程序集
CA1018:用 AttributeUsageAttribute 标记特性
CA1023:索引器不应是多维的
CA1024:在适用处使用属性
在大多数情况下,属性代表数据,而方法执行操作。访问属性的方式与访问字段的方式相似,因此使用它们更容易。如果存在下列条件之一,方法就很适于成为属性:
- 不采用任何参数并返回对象的状态信息。
- 接受单个参数来设置对象的部分状态。
属性的表现应当与字段一样;如果该方法不是这样,则不应将其更改为属性。在下列情况下,方法比属性更好:
- 方法执行耗时的操作。与设置或获取字段值所需的时间相比,此方法的速度明显较慢。
- 方法执行转换。访问字段不会返回它所存储的数据的转换版本。
- Get 方法会产生明显副作用。检索字段的值不会产生任何副作用。
- 执行的顺序很重要。设置字段的值并不依赖于其他操作的发生。
- 连续调用两次方法会产生不同的结果。
- 方法是静态的,但返回了调用方可更改的对象。调用方不能通过检索某字段的值来更改该字段存储的数据。
- 方法返回数组。
CA1025:用形参数组替换重复的实参
CA1034:嵌套类型不应是可见的
CA1040:避免使用空接口
CA1044:属性不应是只写的
CA1049:拥有本机资源的类型应是可释放的
CA1051:不要声明可见实例字段
CA1053:静态容器类型不应具有构造函数
CA1060:将 P/Invoke 移动到 NativeMethods 类
CA1062:验证公共方法的参数
CA1063:正确实现 IDisposable
CA1065:不要在意外的位置引发异常
Microsoft.Globalization
CA1307:指定 StringComparison
CA1308:将字符串规范化为大写
CA1309:使用序号 StringComparison
CA2101:指定对 P/Invoke 字符串参数进行封送处理
// Violates rule: SpecifyMarshalingForPInvokeStringArguments.
[DllImport("advapi32.dll", CharSet=CharSet.Auto)]
internal static extern int RegCreateKey(IntPtr key, String subKey, out IntPtr result);
// Satisfies rule: SpecifyMarshalingForPInvokeStringArguments.
[DllImport("advapi32.dll", CharSet = CharSet.Unicode)]
internal static extern int RegCreateKey2(IntPtr key, String subKey, out IntPtr result);
Microsoft.Maintainability
CA1500:变量名不应与字段名相同
CA1504:检查令人误解的字段名
CA1505:避免编写无法维护的代码
Microsoft.Mobility
CA1601:不要使用阻止电源状态更改的计时器
Microsoft.Naming
CA1700:不要命名“Reserved”枚举值
CA1701:资源字符串复合词应采用正确的大小写
CA1702:复合词应采用正确的大小写
CA1703:资源字符串应正确拼写
CA1704:标识符应正确拼写
CA1707:标识符不应包含下划线
CA1709:标识符的大小写应当正确
CA1710:标识符应具有正确的后缀
CA1711:标识符应采用正确的后缀
CA1712:不要将类型名用作枚举值的前缀
CA1715:标识符应具有正确的前缀
CA1716:标识符不应与关键字冲突
CA1717:只有 FlagsAttribute 枚举应采用复数形式的名称
CA1719:参数名不应与成员名冲突
CA1720:标识符不应包含类型名称
CA1721:属性名不应与 get 方法冲突
CA1722:标识符应采用正确的前缀
CA1724:类型名不应与命名空间冲突
CA1725:参数名应与基方法中的声明保持一致
CA1726:使用首选词条
CA2204:应正确拼写文本
Microsoft.Performance
CA1800:避免进行不必要的强制转换
CA1802:在合适的位置使用文本
CA1804:移除未使用的局部变量
CA1809:避免过多的局部变量
CA1811:避免使用未调用的私有代码
CA1812:避免未实例化的内部类
CA1815:重写值类型上的 Equals 和相等运算符
CA1819:属性不应返回数组
CA1820:使用字符串长度测试是否有空字符串
CA1822:将成员标记为 static
CA1823:避免未使用的私有字段
Microsoft.Portability
CA1900:值类型字段应为可移植字段
CA1903:仅使用目标框架中的 API
Microsoft.Reliability
CA2000:超出范围前释放对象
CA2001:避免调用有问题的方法
Microsoft.Usage
CA1801:检查未使用的参数
CA1806:不要忽略方法结果
CA1816:正确调用 GC.SuppressFinalize
CA2200:再次引发以保留堆栈详细信息
CA2201:不要引发保留的异常类型
CA2202:不要多次释放对象
CA2205:使用 Win32 API 的托管等效项
CA2208:正确实例化参数异常
CA2211:非常量字段不应是可见的
CA2213:应释放可释放的字段
CA2215:Dispose 方法应调用基类的 Dispose
CA2216:可释放类型应声明终结器
CA2224:重载相等运算符时重写 Equals 方法
CA2227:集合属性应为只读
CA2229:实现序列化构造函数
CA2230:对可变数量的参数使用 params
CA2234:传递 System.Uri 对象,而不传递字符串
CA2241:为格式化方法提供正确的参数
CA2242:正确测试 NaN