RalfKoban/MiKo-Analyzers

GitHub: RalfKoban/MiKo-Analyzers

基于 Roslyn 编译平台的 .NET 代码分析器,提供 547 条涵盖命名、文档、指标和维护性的编码规范规则,帮助团队在开发阶段实时发现并修复代码质量问题。

Stars: 17 | Forks: 2

# MiKo-Analyzers 提供基于 .NET Compiler Platform (Roslyn) 的分析器,可在 Visual Studio 2019 (v16.11) 或 2022 (v17.14) 中使用。 有关如何安装 Roslyn 分析器的说明在[这里](https://learn.microsoft.com/en-us/visualstudio/code-quality/install-roslyn-analyzers?view=vs-2022)。 有关如何使用此类分析器的截图可以在[这里](https://learn.microsoft.com/en-us/visualstudio/code-quality/use-roslyn-analyzers?view=vs-2022)找到。 ## 构建 / 项目状态 [![维护](https://img.shields.io/maintenance/yes/2026.svg)](https://github.com/RalfKoban/MiKo-Analyzers) [![构建状态](https://ci.appveyor.com/api/projects/status/qanrqn7r4q9frr9m/branch/master?svg=true)](https://ci.appveyor.com/project/RalfKoban/miko-analyzers/branch/master) [![codecov](https://codecov.io/gh/RalfKoban/MiKo-Analyzers/branch/master/graph/badge.svg)](https://codecov.io/gh/RalfKoban/MiKo-Analyzers) [![Coverity Scan 构建状态](https://img.shields.io/coverity/scan/18917.svg)](https://scan.coverity.com/projects/ralfkoban-miko-analyzers) ## 可用规则 下表列出了该分析器目前提供的全部 547 条规则。 ### 指标 |ID|标题|默认启用|提供 CodeFix| |:-|:----|:----------------:|:---------------:| |[MiKo_0001](/Documentation/MiKo_0001.md)|保持方法简短|✓|\-| |[MiKo_0002](/Documentation/MiKo_0002.md)|简化复杂方法|✓|\-| |[MiKo_0003](/Documentation/MiKo_0003.md)|保持类型简短|✓|\-| |[MiKo_0004](/Documentation/MiKo_0004.md)|限制方法参数|✓|\-| |[MiKo_0005](/Documentation/MiKo_0005.md)|保持本地函数简短|✓|\-| |[MiKo_0006](/Documentation/MiKo_0006.md)|简化复杂的本地函数|✓|\-| |[MiKo_0007](/Documentation/MiKo_0007.md)|限制本地函数参数|✓|\-| ### 命名 |ID|标题|默认启用|提供 CodeFix| |:-|:----|:----------------:|:---------------:| |[MiKo_1000](/Documentation/MiKo_1000.md)|将 'System.EventArgs' 类型以 'EventArgs' 作为后缀|✓|✓| |[MiKo_1001](/Documentation/MiKo_1001.md)|将 'System.EventArgs' 参数命名为 'e'|✓|✓| |[MiKo_1002](/Documentation/MiKo_1002.md)|遵循 .NET Framework 设计规范中的事件处理程序参数命名|✓|✓| |[MiKo_1003](/Documentation/MiKo_1003.md)|遵循 .NET Framework 设计规范中的事件处理方法命名|✓|✓| |[MiKo_1004](/Documentation/MiKo_1004.md)|从事件名称中移除术语 'Event'|✓|✓| |[MiKo_1005](/Documentation/MiKo_1005.md)|正确命名 'System.EventArgs' 变量|✓|✓| |[MiKo_1006](/Documentation/MiKo_1006.md)|使用以事件名称命名的 'EventHandler<T>' 和 'EventArgs'|✓|\-| |[MiKo_1007](/Documentation/MiKo_1007.md)|将事件及其 'EventArgs' 类型放置在相同的命名空间中|✓|\-| |[MiKo_1008](/Documentation/MiKo_1008.md)|遵循 .NET Framework 设计规范中的 DependencyProperty 事件处理程序参数命名|✓|✓| |[MiKo_1009](/Documentation/MiKo_1009.md)|正确命名 'System.EventHandler' 变量|✓|✓| |[MiKo_1010](/Documentation/MiKo_1010.md)|不要在方法名中包含 'CanExecute' 或 'Execute'|✓|✓| |[MiKo_1011](/Documentation/MiKo_1011.md)|不要在方法名中包含 'Do'|✓|✓| |[MiKo_1012](/Documentation/MiKo_1012.md)|在方法名中使用 'Raise' 而不是 'Fire'|✓|✓| |[MiKo_1013](/Documentation/MiKo_1013.md)|不要将方法命名为 'Notify' 或 'OnNotify'|✓|✓| |[MiKo_1014](/Documentation/MiKo_1014.md)|不要在方法名中使用模棱两可的 'Check'|✓|✓| |[MiKo_1015](/Documentation/MiKo_1015.md)|在方法名中使用 'Initialize' 而不是 'Init'|✓|✓| |[MiKo_1016](/Documentation/MiKo_1016.md)|将工厂方法命名为 'Create'|✓|✓| |[MiKo_1017](/Documentation/MiKo_1017.md)|当后面跟着 'Is'、'Can' 或 'Has' 时,不要为方法加上 'Get' 或 'Set' 前缀|✓|✓| |[MiKo_1018](/Documentation/MiKo_1018.md)|不要用动词的名词形式作为方法后缀|✓|✓| |[MiKo_1019](/Documentation/MiKo_1019.md)|根据参数数量命名 'Clear' 和 'Remove' 方法|✓|✓| |[MiKo_1020](/Documentation/MiKo_1020.md)|限制类型名称长度|\-|\-| |[MiKo_1021](/Documentation/MiKo_1021.md)|限制方法名称长度|\-|\-| |[MiKo_1022](/Documentation/MiKo_1022.md)|限制参数名称长度|\-|\-| |[MiKo_1023](/Documentation/MiKo_1023.md)|限制字段名称长度|\-|\-| |[MiKo_1024](/Documentation/MiKo_1024.md)|限制属性名称长度|\-|\-| |[MiKo_1025](/Documentation/MiKo_1025.md)|限制事件名称长度|\-|\-| |[MiKo_1026](/Documentation/MiKo_1026.md)|限制变量名称长度|\-|\-| |[MiKo_1027](/Documentation/MiKo_1027.md)|限制循环变量名称长度|\-|\-| |[MiKo_1028](/Documentation/MiKo_1028.md)|限制本地函数名称长度|\-|\-| |[MiKo_1030](/Documentation/MiKo_1030.md)|不要用 'Abstract' 或 'Base' 标记基类型|✓|✓| |[MiKo_1031](/Documentation/MiKo_1031.md)|不要用 'Model' 作为实体类型的后缀|✓|✓| |[MiKo_1032](/Documentation/MiKo_1032.md)|在处理实体的方法中不要使用 'Model' 作为标记|✓|✓| |[MiKo_1033](/Documentation/MiKo_1033.md)|不要用 'Model' 作为实体参数的后缀|✓|✓| |[MiKo_1034](/Documentation/MiKo_1034.md)|不要用 'Model' 作为实体字段的后缀|✓|✓| |[MiKo_1035](/Documentation/MiKo_1035.md)|在处理实体的属性中不要使用 'Model' 标记|✓|✓| |[MiKo_1036](/Documentation/MiKo_1036.md)|在处理实体的事件中不要使用 'Model' 标记|✓|✓| |[MiKo_1037](/Documentation/MiKo_1037.md)|不要用 'Type'、'Interface'、'Class'、'Struct'、'Record' 或 'Enum' 作为类型的后缀|✓|✓| |[MiKo_1038](/Documentation/MiKo_1038.md)|为扩展方法容器类使用一致的后缀|✓|✓| |[MiKo_1039](/Documentation/MiKo_1039.md)|使用默认名称作为扩展方法的 'this' 参数|✓|✓| |[MiKo_1040](/Documentation/MiKo_1040.md)|不要用实现细节作为参数的后缀|✓|✓| |[MiKo_1041](/Documentation/MiKo_1041.md)|不要用实现细节作为字段的后缀|✓|✓| |[MiKo_1042](/Documentation/MiKo_1042.md)|为 'CancellationToken' 参数使用特定名称|✓|✓| |[MiKo_1043](/Documentation/MiKo_1043.md)|为 'CancellationToken' 变量使用特定名称|✓|✓| |[MiKo_1044](/Documentation/MiKo_1044.md)|以 'Command' 作为命令的后缀|✓|✓| |[MiKo_1045](/Documentation/MiKo_1045.md)|不要用 'Command' 作为命令调用方法的后缀|✓|✓| |[MiKo_1046](/Documentation/MiKo_1046.md)|对异步方法遵循基于任务的异步模式 (TAP)|✓|✓| |[MiKo_1047](/Documentation/MiKo_1047.md)|对于未遵循基于任务的异步模式 (TAP) 的方法,不要错误地指示异步行为|✓|✓| |[MiKo_1048](/Documentation/MiKo_1048.md)|以特定后缀结束值转换器类|✓|✓| |[MiKo_1049](/Documentation/MiKo_1049.md)|不要在名称中使用 'Shall'、'Should'、'Must' 或 'Need' 等要求性术语|✓|✓| |[MiKo_1050](/Documentation/MiKo_1050.md)|为返回值使用描述性名称|✓|✓| |[MiKo_1051](/Documentation/MiKo_1051.md)|不要用委托类型作为参数的后缀|✓|✓| |[MiKo_1052](/Documentation/MiKo_1052.md)|不要用委托类型作为变量的后缀|✓|✓| |[MiKo_1053](/Documentation/MiKo_1053.md)|不要用委托类型作为字段的后缀|✓|✓| |[MiKo_1054](/Documentation/MiKo_1054.md)|不要将类型命名为 'Helper' 或 'Utility'|✓|✓| |[MiKo_1055](/Documentation/MiKo_1055.md)|以 'Property' 作为依赖属性的后缀(如 .NET Framework 中所示)|✓|✓| |[MiKo_1056](/Documentation/MiKo_1056.md)|以属性名称作为依赖属性的前缀(如 .NET Framework 中所示)|✓|✓| |[MiKo_1057](/Documentation/MiKo_1057.md)|以 'Key' 作为依赖属性键的后缀(如 .NET Framework 中所示)|✓|✓| |[MiKo_1058](/Documentation/MiKo_1058.md)|以属性名称作为依赖属性键的前缀(如 .NET Framework 中所示)|✓|✓| |[MiKo_1059](/Documentation/MiKo_1059.md)|不要将类型命名为 'Impl' 或 'Implementation'|✓|✓| |[MiKo_1060](/Documentation/MiKo_1060.md)|使用 '<Entity>NotFound' 而不是 'Get<Entity>Failed' 或 '<Entity>Missing'|✓|✓| |[MiKo_1061](/Documentation/MiKo_1061.md)|为Try' 方法的 [out] 参数使用特定名称|✓|✓| |[MiKo_1062](/Documentation/MiKo_1062.md)|保持 'Can/Has/Contains' 方法、属性或字段简短|✓|\-| |[MiKo_1063](/Documentation/MiKo_1063.md)|不要在名称中使用缩写|✓|✓| |[MiKo_1064](/Documentation/MiKo_1064.md)|让参数名称反映其含义,而不是其类型|✓|\-| |[MiKo_1065](/Documentation/MiKo_1065.md)|遵循 .NET Framework 设计规范中的运算符重载参数命名|✓|✓| |[MiKo_1066](/Documentation/MiKo_1066.md)|以分配给的属性名称来命名构造函数参数|✓|✓| |[MiKo_1067](/Documentation/MiKo_1067.md)|不要在方法名中包含 'Perform'|✓|✓| |[MiKo_1068](/Documentation/MiKo_1068.md)|将工作流方法命名为 'CanRun' 或 'Run'|✓|\-| |[MiKo_1069](/Documentation/MiKo_1069.md)|让属性名称反映其含义,而不是其类型|✓|\-| |[MiKo_1070](/Documentation/MiKo_1070.md)|为本地集合变量使用复数名称|✓|✓| |[MiKo_1071](/Documentation/MiKo_1071.md)|将本地布尔变量命名为陈述句,而不是疑问句|✓|\-| |[MiKo_1072](/Documentation/MiKo_1072.md)|将布尔属性或方法命名为陈述句,而不是疑问句|✓|\-| |[MiKo_1073](/Documentation/MiKo_1073.md)|将布尔字段命名为陈述句,而不是疑问句|✓|\-| |[MiKo_1074](/Documentation/MiKo_1074.md)|以 'Lock' 作为锁对象的后缀|✓|\-| |[MiKo_1075](/Documentation/MiKo_1075.md)|不要用 'EventArgs' 作为非 'System.EventArgs' 类型的后缀|✓|✓| |[MiKo_1076](/Documentation/MiKo_1076.md)|以 'Event' 作为 Prism 事件类型的后缀|✓|✓| |[MiKo_1077](/Documentation/MiKo_1077.md)|不要用 'Enum' 作为枚举成员的后缀|✓|✓| |[MiKo_1078](/Documentation/MiKo_1078.md)|以 'Build' 作为构建器方法名称的开头|✓|✓| |[MiKo_1079](/Documentation/MiKo_1079.md)|不要用 'Repository' 作为仓储的后缀|✓|✓| |[MiKo_1080](/Documentation/MiKo_1080.md)|在名称中使用数字而不是其拼写形式|✓|\-| |[MiKo_1081](/Documentation/MiKo_1081.md)|不要用数字作为方法的后缀|✓|✓| |[MiKo_1082](/Documentation/MiKo_1082.md)|如果属性的类型带有数字后缀,则不要用数字作为该属性的后缀|✓|✓| |[MiKo_1083](/Documentation/MiKo_1083.md)|如果字段的类型带有数字后缀,则不要用数字作为该字段的后缀|✓|✓| |[MiKo_1084](/Documentation/MiKo_1084.md)|如果变量的类型带有数字后缀,则不要用数字作为该变量的后缀|✓|✓| |[MiKo_1085](/Documentation/MiKo_1085.md)|不要用数字作为参数的后缀|✓|✓| |[MiKo_1086](/Documentation/MiKo_1086.md)|不要在方法名称中使用数字作为俚语|✓|\-| |[MiKo_1087](/Documentation/MiKo_1087.md)|根据基类对应项命名构造函数参数|✓|✓| |[MiKo_1088](/Documentation/MiKo_1088.md)|将单例实例命名为 'Instance'|✓|\-| |[MiKo_1089](/Documentation/MiKo_1089.md)|不要为方法加上 'Get' 前缀|✓|✓| |[MiKo_1090](/Documentation/MiKo_1090.md)|不要用特定类型作为参数的后缀|✓|✓| |[MiKo_1091](/Documentation/MiKo_1091.md)|不要用特定类型作为变量的后缀|✓|✓| |[MiKo_1092](/Documentation/MiKo_1092.md)|不要用冗余信息作为 'Ability' 类型的后缀|✓|✓| |[MiKo_1093](/Documentation/MiKo_1093.md)|不要使用 'Object' 或 'Struct' 后缀|✓|✓| |[MiKo_1094](/Documentation/MiKo_1094.md)|不要用被动的命名空间名称作为类型的后缀|✓|\-| |[MiKo_1095](/Documentation/MiKo_1095.md)|不要在名称和文档中同时使用 'Delete' 和 'Remove'|✓|\-| |[MiKo_1096](/Documentation/MiKo_1096.md)|在名称中使用 'Failed' 而不是 'NotSuccessful'|✓|\-| |[MiKo_1097](/Documentation/MiKo_1097.md)|不要将字段命名方案用于参数名称|✓|✓| |[MiKo_1098](/Documentation/MiKo_1098.md)|在类型名称中反映已实现的业务接口|✓|\-| |[MiKo_1099](/Documentation/MiKo_1099.md)|为方法重载中匹配的参数使用相同的名称|✓|✓| |[MiKo_1100](/Documentation/MiKo_1100.md)|以被测类型的名称作为测试类名称的开头|✓|\-| |[MiKo_1101](/Documentation/MiKo_1101.md)|以 'Tests' 作为测试类名称的结尾|✓|✓| |[MiKo_1102](/Documentation/MiKo_1102.md)|不要在测试方法名中包含 'Test'|✓|✓| |[MiKo_1103](/Documentation/MiKo_1103.md)|将测试初始化方法命名为 'PrepareTest'|✓|✓| |[MiKo_1104](/Documentation/MiKo_1104.md)|将测试清理方法命名为 'CleanupTest'|✓|✓| |[MiKo_1105](/Documentation/MiKo_1105.md)|将一次性测试初始化方法命名为 'PrepareTestEnvironment'|✓|✓| |[MiKo_1106](/Documentation/MiKo_1106.md)|将一次性测试清理方法命名为 'CleanupTestEnvironment'|✓|✓| |[MiKo_1107](/Documentation/MiKo_1107.md)|不要对测试方法使用 Pascal 命名法|✓|✓| |[MiKo_1108](/Documentation/MiKo_1108.md)|不要将变量、参数、字段和属性命名为 'Mock'、'Stub'、'Fake' 或 'Shim'|✓|✓| |[MiKo_1109](/Documentation/MiKo_1109.md)|为可测试类型加上 'Testable' 前缀,而不是使用 'Ut' 后缀|✓|✓| |[MiKo_1110](/Documentation/MiKo_1110.md)|用下划线作为带参数的测试方法的后缀|✓|✓| |[MiKo_1111](/Documentation/MiKo_1111.md)|不要用下划线作为无参数测试方法的后缀|✓|✓| |[MiKo_1112](/Documentation/MiKo_1112.md)|不要将测试数据命名为 'arbitrary'|✓|✓| |[MiKo_1113](/Documentation/MiKo_1113.md)|不要对测试方法使用 BDD 风格的命名|✓|\-| |[MiKo_1114](/Documentation/MiKo_1114.md)|不要将测试方法命名为 'HappyPath' 或 'BadPath'|✓|\-| |[MiKo_1115](/Documentation/MiKo_1115.md)|以流畅的方式命名测试方法|✓|✓| |[MiKo_1116](/Documentation/MiKo_1116.md)|测试方法名使用一般现在时|✓|✓| |[MiKo_1117](/Documentation/MiKo_1117.md)|使测试方法名称更精确|✓|\-| |[MiKo_1118](/Documentation/MiKo_1118.md)|不要以 'Async' 结束测试方法名|✓|✓| |[MiKo_1119](/Documentation/MiKo_1119.md)|不要在测试方法名中包含 'when_present'|✓|\-| |[MiKo_1200](/Documentation/MiKo_1200.md)|一致地命名 catch 块异常|✓|✓| |[MiKo_1201](/Documentation/MiKo_1201.md)|一致地命名异常参数|✓|✓| |[MiKo_1300](/Documentation/MiKo_1300.md)|将不重要的 lambda 参数命名为 '_'|✓|✓| |[MiKo_1400](/Documentation/MiKo_1400.md)|命名空间名称使用复数形式|✓|\-| |[MiKo_1401](/Documentation/MiKo_1401.md)|不要在命名空间中包含技术语言名称|✓|\-| |[MiKo_1402](/Documentation/MiKo_1402.md)|不要以 WPF 特定的设计模式命名命名空间|✓|\-| |[MiKo_1403](/Documentation/MiKo_1403.md)|不要以其任何父命名空间来命名命名空间|✓|\-| |[MiKo_1404](/Documentation/MiKo_1404.md)|不要为命名空间使用不具体的名称|✓|\-| |[MiKo_1405](/Documentation/MiKo_1405.md)|不要在命名空间中包含 'Lib'|✓|\-| |[MiKo_1406](/Documentation/MiKo_1406.md)|将值转换器放置在 'Converters' 命名空间中|✓|\-| |[MiKo_1407](/Documentation/MiKo_1407.md)|不要在测试命名空间中包含 'Test'|✓|\-| |[MiKo_1408](/Documentation/MiKo_1408.md)|将扩展方法放置在与扩展类型相同的命名空间中|✓|\-| |[MiKo_1409](/Documentation/MiKo_1409.md)|不要在命名空间前后加下划线|✓|\-| |[MiKo_1501](/Documentation/MiKo_1501.md)|不要在名称中使用 'Filter'|✓|\-| |[MiKo_1502](/Documentation/MiKo_1502.md)|不要在名称中使用 'Process'|✓|\-| |[MiKo_1503](/Documentation/MiKo_1503.md)|不要用 'Counter' 作为方法的后缀|✓|✓| |[MiKo_1504](/Documentation/MiKo_1504.md)|不要用 'Counter' 作为属性的后缀|✓|✓| |[MiKo_1505](/Documentation/MiKo_1505.md)|不要用 '' 作为字段的后缀|✓|✓| |[MiKo_1506](/Documentation/MiKo_1506.md)|不要用 'Counter' 作为本地变量的后缀|✓|✓| |[MiKo_1507](/Documentation/MiKo_1507.md)|不要用 'Counter' 作为参数的后缀|✓|✓| |[MiKo_1508](/Documentation/MiKo_1508.md)|不要用模式名称作为本地变量的后缀|✓|✓| |[MiKo_1509](/Documentation/MiKo_1509.md)|不要用模式名称作为参数的后缀|✓|✓| |[MiKo_1510](/Documentation/MiKo_1510.md)|不要用模式名称作为字段的后缀|✓|✓| |[MiKo_1511](/Documentation/MiKo_1511.md)|不要用 'proxy' 作为本地变量的前缀或后缀|✓|✓| |[MiKo_1512](/Documentation/MiKo_1512.md)|不要用 'proxy' 作为参数的前缀或后缀|✓|✓| |[MiKo_1513](/Documentation/MiKo_1513.md)|不要用 'Advanced'、'Complex'、'Enhanced'、'Extended'、'Simple' 或 'Simplified' 作为类型的后缀|✓|✓| |[MiKo_1514](/Documentation/MiKo_1514.md)|不要用 'Info' 作为类型的后缀|✓|\-| |[MiKo_1515](/Documentation/MiKo_1515.md)|在布尔属性名称中清晰地表达二进制条件|✓|✓| |[MiKo_1516](/Documentation/MiKo_1516.md)|在布尔参数名称中清晰地表达二进制条件|✓|✓| |[MiKo_1517](/Documentation/MiKo_1517.md)|在布尔字段名称中清晰地表达二进制条件|✓|✓| |[MiKo_1518](/Documentation/MiKo_1518.md)|不要用 'reference' 作为本地变量的前缀或后缀|✓|✓| |[MiKo_1519](/Documentation/MiKo_1519.md)|不要用 'reference' 作为参数的前缀或后缀|✓|✓| |[MiKo_1520](/Documentation/MiKo_1520.md)|不要用 'toCopy' 作为本地变量的前缀或后缀|✓|✓| |[MiKo_1521](/Documentation/MiKo_1521.md)|不要用 'toCopy' 作为参数的前缀或后缀|✓|✓| |[MiKo_1522](/Documentation/MiKo_1522.md)|不要为 'void' 方法加上 'Get' 前缀|✓|\-| |[MiKo_1523](/Documentation/MiKo_1523.md)|不要将方法命名为 'Helper'|✓|\-| |[MiKo_1524](/Documentation/MiKo_1524.md)|不要为方法加上 'Sub_' 前缀|✓|✓| |[MiKo_1525](/Documentation/MiKo_1525.md)|不要为非布尔属性加上布尔指示符前缀|✓|\-| |[MiKo_1526](/Documentation/MiKo_1526.md)|以 'Callback' 作为委托属性的后缀|✓|✓| |[MiKo_1527](/Documentation/MiKo_1527.md)|不要用 'Sub' 作为类型的后缀|✓|✓| |[MiKo_1528](/Documentation/MiKo_1528.md)|不要为参数加上 'arg' 前缀|✓|✓| |[MiKo_1529](/Documentation/MiKo_1529.md)|不要为方法加上第三人称单数动词前缀|✓|✓| |[MiKo_1530](/Documentation/MiKo_1530.md)|遵循 .NET Framework 设计规范中的 DependencyPropertyChanged 回调方法命名|✓|✓| ### 文档 |ID|标题|默认启用|提供 CodeFix| |:-|:----|:----------------:|:---------------:| |[MiKo_2000](/Documentation/MiKo_2000.md)|编写有效的 XML 文档|✓|✓| |[MiKo_2001](/Documentation/MiKo_2001.md)|正确地记录事件|✓|✓| |[MiKo_2002](/Documentation/MiKo_2002.md)|正确地记录 EventArgs|✓|✓| |[MiKo_2003](/Documentation/MiKo_2003.md)|以默认短语开始事件处理程序文档|✓|✓| |[MiKo_2004](/Documentation/MiKo_2004.md)|在文档中遵循 .NET Framework 设计规范的事件处理程序参数命名|✓|✓| |[MiKo_2005](/Documentation/MiKo_2005.md)|正确地记录对 EventArgs 的文本引用|✓|\-| |[MiKo_2006](/Documentation/MiKo_2006.md)|像 .NET Framework 那样记录路由事件|✓|✓| |[MiKo_2010](/Documentation/MiKo_2010.md)|将被密封的类记录为密封的|✓|✓| |[MiKo_2011](/Documentation/MiKo_2011.md)|不要错误地将未密封的类记录为密封的|✓|✓| |[MiKo_2012](/Documentation/MiKo_2012.md)|在 <summary> 文档中描述职责|✓|✓| |[MiKo_2013](/Documentation/MiKo_2013.md)|以默认短语开始 Enum <summary> 文档|✓|✓| |[MiKo_2014](/Documentation/MiKo_2014.md)|像 .NET Framework 那样记录 Dispose 方法|✓|✓| |[MiKo_2015](/Documentation/MiKo_2015.md)|在文档中使用 'raise' 或 'throw' 而不是 'fire'|✓|✓| |[MiKo_2016](/Documentation/MiKo_2016.md)|以特定短语开始异步方法的文档|✓|✓| |[MiKo_2017](/Documentation/MiKo_2017.md)|像 .NET Framework 那样记录依赖属性|✓|✓| |[MiKo_2018](/Documentation/MiKo_2018.md)|不要在文档中使用模棱两可的术语 'Check' 或 'Test'|✓|✓| |[MiKo_2019](/Documentation/MiKo_2019.md)|以第三人称单数动词(例如 "Provides")开始 <summary> 文档|✓|✓| |[MiKo_2020](/Documentation/MiKo_2020.md)|使用 <inheritdoc /> 标记作为继承的文档|✓|✓| |[MiKo_2021](/Documentation/MiKo_2021.md)|以默认短语开始参数文档|✓|✓| |[MiKo_2022](/Documentation/MiKo_2022.md)|以默认短语开始 [out] 参数文档|✓|✓| |[MiKo_2023](/Documentation/MiKo_2023.md)|以默认短语开始布尔参数文档|✓|✓| |[MiKo_2024](/Documentation/MiKo_2024.md)|以默认短语开始 Enum 参数文档|✓|✓| |[MiKo_2025](/Documentation/MiKo_2025.md)|以默认短语开始 'CancellationToken' 参数文档|✓|✓| |[MiKo_2026](/Documentation/MiKo_2026.md)|不要将已使用的参数记录为未使用|✓|\-| |[MiKo_2027](/Documentation/MiKo_2027.md)|以特定短语记录序列化构造函数参数|✓|✓| |[MiKo_2028](/Documentation/MiKo_2028.md)|在文档中提供比仅参数名称更多的信息|✓|\-| |[MiKo_2029](/Documentation/MiKo_2029.md)|不要在 <inheritdoc> 文档中使用自引用的 'cref'|✓|✓| |[MiKo_2030](/Documentation/MiKo_2030.md)|以默认短语开始返回值文档|✓|\-| |[MiKo_2031](/Documentation/MiKo_2031.md)|为 Task 返回值文档使用特定(起始)短语|✓|✓| |[MiKo_2032](/Documentation/MiKo_2032.md)|为布尔返回值文档使用特定短语|✓|✓| |[MiKo_2033](/Documentation/MiKo_2033.md)|以默认短语开始字符串返回值文档|✓|✓| |[MiKo_2034](/Documentation/MiKo_2034.md)|以默认短语开始 Enum 返回值文档|✓|✓| |[MiKo_2035](/Documentation/MiKo_2035.md)|以默认短语开始集合返回值文档|✓|✓| |[MiKo_2036](/Documentation/MiKo_2036.md)|在布尔或 Enum 属性文档中描述默认值|✓|✓| |[MiKo_2037](/Documentation/MiKo_2037.md)|以默认短语开始命令属性 <summary> 文档|✓|✓| |[MiKo_2038](/Documentation/MiKo_2038.md)|以默认短语开始命令 <summary> 文档|✓|✓| |[MiKo_2039](/Documentation/MiKo_2039.md)|以默认短语开始扩展方法类 <summary> 文档|✓|✓| |[MiKo_2040](/Documentation/MiKo_2040.md)|使用 <see langword="..."/> 而不是 <c>...</c>|✓|✓| |[MiKo_2041](/Documentation/MiKo_2041.md)|不要在 <summary> 文档中包含其他文档标签|✓|✓| |[MiKo_2042](/Documentation/MiKo_2042.md)|在文档中使用 '<para>' XML 标签而不是 '<p>' HTML 标签|✓|✓| |[MiKo_2043](/Documentation/MiKo_2043.md)|以默认短语开始自定义委托 <summary> 文档|✓|✓| |[MiKo_2044](/Documentation/MiKo_2044.md)|在文档中正确引用方法参数|✓|✓| |[MiKo_2045](/Documentation/MiKo_2045.md)|不要在 <summary> 文档中引用参数|✓|✓| |[MiKo_2046](/Documentation/MiKo_2046.md)|在文档中正确引用类型参数|✓|✓| |[MiKo_2047](/Documentation/MiKo_2047.md)|以默认短语开始 Attribute <summary> 文档|✓|\-| |[MiKo_2048](_URL_220/>)|以默认短语开始值转换器 <summary> 文档|✓|✓| |[MiKo_2049](/Documentation/MiKo_2049.md)|在文档中使用明确的措辞而不是 'will be'|✓|✓| |[MiKo_2050](/Documentation/MiKo_2050.md)|遵循 .NET Framework 惯例进行异常文档编写|✓|✓| |[MiKo_2051](/Documentation/MiKo_2051.md)|将引发的异常记录为条件(例如,'<paramref name="xyz"/> is <c>42</c>')|✓|✓| |[MiKo_2052](/Documentation/MiKo_2052.md)|对 ArgumentNullException 文档使用默认短语|✓|✓| |[MiKo_2053](/Documentation/MiKo_2053.md)|仅为引用类型参数记录 ArgumentNullException|✓|\-| |[MiKo_2054](/Documentation/MiKo_2054.md)|以默认短语开始 ArgumentException 文档|✓|✓| |[MiKo_2055](/Documentation/MiKo_2055.md)|以默认短语开始 ArgumentOutOfRangeException 文档|✓|✓| |[MiKo_2056](/Documentation/MiKo_2056.md)|以默认短语结束 ObjectDisposedException 文档|✓|✓| |[MiKo_2057](/Documentation/MiKo_2057.md)|不要从不可释放的类型中抛出 ObjectDisposedException|✓|✓| |[MiKo_2059](/Documentation/MiKo_2059.md)|将同一异常的多个文档合并为一个|✓|✓| |[MiKo_2060](/Documentation/MiKo_2060.md)|统一记录工厂方法|✓|✓| |[MiKo_2070](/Documentation/MiKo_2070.md)|不要以 'Returns' 开始 <summary> 文档|✓|✓| |[MiKo_2071](/Documentation/MiKo_2071.md)|不要在 Enum 返回类型 <summary> 文档中使用布尔短语|✓|\-| |[MiKo_2072](/Documentation/MiKo_2072.md)|不要以 'Try' 开始 <summary> 文档|✓|✓| |[MiKo_2073](/Documentation/MiKo_2073.md)|以 'Determines whether' 开始 'Contains' 方法 <summary> 文档|✓|✓| |[MiKo_2074](/Documentation/MiKo_2074.md)|以默认短语结束 'Contains' 方法的参数文档|✓|✓| |[MiKo_2075](/Documentation/MiKo_2075.md)|在文档中使用 'callback' 而不是 'action'、'func' 或 'function'|✓|✓| |[MiKo_2076](/Documentation/MiKo_2076.md)|记录可选参数的默认值|✓|✓| |[MiKo_2077](/Documentation/MiKo_2077.md)|不要在 <summary> 文档中包含 <code>|✓|\-| |[MiKo_2078](/Documentation/MiKo_2078.md)|不要在 <code> 文档中包含 XML 标签|✓|\-| |[MiKo_2079](/Documentation/MiKo_2079.md)|不要在属性 <summary> 文档中包含显而易见的文本|✓|✓| |[MiKo_2080](/Documentation/MiKo_2080.md)|以默认短语开始字段 <summary> 文档|✓|✓| |[MiKo_2081](/Documentation/MiKo_2081.md)|以默认短语结束公开可见的只读字段 <summary> 文档|✓|✓| |[MiKo_2082](/Documentation/MiKo_2082.md)|为 Enum 成员 <summary> 文档使用不同的短语|✓|✓| |[MiKo_2083](/Documentation/MiKo_2083.md)|不要错误地将可写字段记录为只读|✓|✓| |[MiKo_2090](/Documentation/MiKo_2090.md)|为相等运算符文档使用默认短语|✓|✓| |[MiKo_2091](/Documentation/MiKo_2091.md)|为不等运算符文档使用默认短语|✓|✓| |[MiKo_2100](/Documentation/MiKo_2100.md)|以描述性的默认短语开始 <example> 文档|✓|✓| |[MiKo_2101](/Documentation/MiKo_2101.md)|在 <example> 文档中的 <code> 标签内展示代码示例|✓|✓| |[MiKo_2200](/Documentation/MiKo_2200.md)|以大写字母开始注释|✓|✓| |[MiKo_2201](/Documentation/MiKo_2201.md)|在注释中句子以大写字母开头|✓|\-| |[MiKo_2202](/Documentation/MiKo_2202.md)|在文档中使用术语 'identifier' 而不是 'id'|✓|✓| |[MiKo_2203](/Documentation/MiKo_2203.md)|在文档中使用术语 'unique identifier' 而不是 'guid'|✓|✓| |[MiKo_2204](/Documentation/MiKo_2204.md)|在文档中使用 <list> 进行枚举|✓|✓| |[MiKo_2205](/Documentation/MiKo_2205.md)|在文档中使用 <note> 标注重要信息|✓|\-| |[MiKo_2206](/Documentation/MiKo_2206.md)|不要在文档中使用术语 'flag'|✓|\-| |[MiKo_2207](/Documentation/MiKo_2207.md)|保持 <summary> 文档简短|✓|\-| |[MiKo_2208](/Documentation/MiKo_2208.md)|不要在文档中使用术语 'an instance of'|✓|✓| |[MiKo_2209](/Documentation/MiKo_2209.md)|不要在文档中使用双句号|✓|✓| |[MiKo_2210](/Documentation/MiKo_2210.md)|在文档中使用术语 'information' 而不是 'info'|✓|✓| |[MiKo_2211](/Documentation/MiKo_2211.md)|不要对枚举成员使用 <remarks> 部分|✓|✓| |[MiKo_2212](/Documentation/MiKo_2212.md)|在文档中使用短语 'failed' 而不是 'was not successful'|✓|✓| |[MiKo_2213](/Documentation/MiKo_2213.md)|不要在文档中使用缩写 "n't"|✓|✓| |[MiKo_2214](/Documentation/MiKo_2214.md)|从文档中删除空行|✓|✓| |[MiKo_2215](/Documentation/MiKo_2215.md)|保持文档句子简短|✓|\-| |[MiKo_2216](/Documentation/MiKo_2216.md)|使用 <paramref> 而不是 <param> 来引用参数|✓|✓| |[MiKo_2217](/Documentation/MiKo_2217.md)|正确格式化 <list> 文档|✓|✓| |[MiKo_2218](/Documentation/MiKo_2218.md)|在文档中使用较短的术语而不是 'used to/in/by'|✓|✓| |[MiKo_2219](/Documentation/MiKo_2219.md)|不要在文档中使用问号或感叹号|✓|\-| |[MiKo_2220](/Documentation/MiKo_2220.md)|在文档中使用 'to seek' 而不是 'to look for'、'to inspect for' 或 'to test for'|✓|✓| |[MiKo_2221](/Documentation/MiKo_2221.md)|不要在文档中使用空的 XML 标签|✓|\-| |[MiKo_2222](/Documentation/MiKo_2222.md)|在文档中使用术语 'identification' 而不是 'ident'|✓|✓| |[MiKo_2223](/Documentation/MiKo_2223.md)|在文档中通过 <see cref="..."/> 链接引用|✓|✓| |[MiKo_2224](/Documentation/MiKo_2224.md)|在文档中将 XML 标签和文本放在单独的行上|✓|✓| |[MiKo_2225](/Documentation/MiKo_2225.md)|将带有 <c> 标签的代码放在单行上|✓|✓| |[MiKo_2226](/Documentation/MiKo_2226.md)|在文档中解释“为什么”而不是“那个”|✓|\-| |[MiKo_2227](/Documentation/MiKo_2227.md)|从文档中删除 ReSharper 抑制|✓|\-| |[MiKo_2228](/Documentation/MiKo_2228.md)|在文档中使用积极的措辞而不是消极的|✓|\-| |[MiKo_2229](/Documentation/MiKo_2229.md)|从文档中删除残留的 XML 片段|✓|✓| |[MiKo_2230](/Documentation/MiKo_2230.md)|在文档中对具有特定含义的返回值使用 <list>|✓|✓| |[MiKo_2231](/Documentation/MiKo_2231.md)|为重写的 'GetHashCode()' 方法文档使用 '<inheritdoc />' 标记|✓|✓| |[MiKo_2232](/Documentation/MiKo_2232.md)|不要将 <summary> 文档留空|✓|✓| |[MiKo_2233](/Documentation/MiKo_2233.md)|将 XML 标签放在单行上|✓|✓| |[MiKo_2234](/Documentation/MiKo_2234.md)|在文档中使用 'to' 而不是 'that is to' 或 'which is to'|✓|✓| |[MiKo_2235](/Documentation/MiKo_2235.md)|在文档中使用 'will' 而不是 'going to'|✓|✓| |[MiKo_2236](/Documentation/MiKo_2236.md)|在文档中使用 'for example' 而不是缩写 'e.g.'|✓|✓| |[MiKo_2237](/Documentation/MiKo_2237.md)|不要用空行分隔文档|✓|✓| |[MiKo_2238](/Documentation/MiKo_2238.md)|不要以 'Make sure to call this' 开始 <summary; 文档|✓|\-| |[MiKo_2239](/Documentation/MiKo_2239.md)|使用 '///' 而不是 '/** */' 进行文档编写|✓|✓| |[MiKo_2240](/Documentation/MiKo_2240.md)|不要以 'Returns' 开始 <response> 文档|✓|✓| |[MiKo_2241](/Documentation/MiKo_2241.md)|不要在文档中使用 'empty string'|✓|✓| |[MiKo_2242](/Documentation/MiKo_2242.md)|在文档中使用 'textual representation' 而不是 'string representation'|✓|✓| |[MiKo_2244](/Documentation/MiKo_2244.md)|在文档中使用 <list> 而不是 <ul> 或 <ol>|✓|✓| |[MiKo_2245](/Documentation/MiKo_2245.md)|在文档中用 <c> 包裹数字|✓|✓| |[MiKo_2300](/Documentation/MiKo_2300.md)|在注释中解释“为什么”而不是“如何”|✓|\-| |[MiKo_2301](/Documentation/MiKo_2301.md)|不要在 AAA 测试中使用显而易见的注释|✓|✓| |[MiKo_2302](/Documentation/MiKo_2302.md)|删除被注释掉的代码|✓|\-| |[MiKo_2303](/Documentation/MiKo_2303.md)|不要以句号结束注释|✓|✓| |[MiKo_2304](/Documentation/MiKo_2304.md)|不要将注释表述为问题|✓|\-| |[MiKo_2305](/Documentation/MiKo_2305.md)|不要在注释中使用双句号|✓|✓| |[MiKo_2306](/Documentation/MiKo_2306.md)|以句号结束注释|\-|\-| |[MiKo_2307](/Documentation/MiKo_2307.md)|在注释中使用短语 'failed' 而不是 'was not successful'|✓|✓| |[MiKo_2308](/Documentation/MiKo_2308.md)|将注释放在代码之后,而不是在右大括号前的单行上|✓|✓| |[MiKo_2309](/Documentation/MiKo_2309.md)|不要在注释中使用缩写 "n't"|✓|✓| |[MiKo_2310](/Documentation/MiKo_2310.md)|在注释中解释“为什么”而不是“那个”|✓|\-| |[MiKo_2311](/Documentation/MiKo_2311.md)|不要使用分隔注释|✓|✓| |[MiKo_2312](/Documentation/MiKo_2312.md)|在注释中使用 'to' 而不是 'that is to' 或 'which is to'|✓|✓| |[MiKo_2313](/Documentation/MiKo_2313.md)|将纯文本文档注释格式化为 XML 文档|✓|✓| ### 可维护性 |ID|标题|默认启用|提供 CodeFix| |:-|:----|:----------------:|:---------------:| |[MiKo_3000](/Documentation/MiKo_3000.md)|不要使用空区域|✓|\-| |[MiKo_3001](/Documentation/MiKo_3001.md)|不要使用自定义委托|✓|\-| |[MiKo_3002](/Documentation/MiKo_3002.md)|限制类依赖项|✓|\-| |[MiKo_3003](/Documentation/MiKo_3003.md)|遵循 .NET Framework 设计规范中的事件规范|✓|\-| |[MiKo_3004](/Documentation/MiKo_3004.md)|将 EventArgs 属性设置器设为私有|✓|\-| |[MiKo_3005](/Documentation/MiKo_3005.md)|对名为 'Try' 的方法遵循 Trier-Doer 模式|✓|\-| |[MiKo_3006](/Documentation/MiKo_3006.md)|将 'CancellationToken' 参数放在方法参数的最后|✓|\-| |[MiKo_3007](/Documentation/MiKo_3007.md)|不要在同一方法中混合使用 LINQ 方法和声明式查询语法|✓|\-| |[MiKo_3008](/Documentation/MiKo_3008.md)|返回不可变集合|✓|\-| |[MiKo_3009](/Documentation/MiKo_3009.md)|使用命名方法而不是带命令的 lambda 表达式|✓|\-| |[MiKo_3010](/Documentation/MiKo_3010.md)|不要创建或抛出保留的异常类型|✓|\-| |[MiKo_3011](/Documentation/MiKo_3011.md)|为 ArgumentExceptions 提供正确的参数名称|✓|✓| |[MiKo_3012](/Documentation/MiKo_3012.md)|抛出 ArgumentOutOfRangeException 时提供实际值|✓|✓| |[MiKo_3013](/Documentation/MiKo_3013.md)|在 'switch' default 子句中抛出 ArgumentOutOfRangeException(而不是 ArgumentException)|✓|✓| |[MiKo_3014](/Documentation/MiKo_3014.md)|在 InvalidOperationException、NotImplementedException 和 NotSupportedException 消息中包含原因|✓|✓| |[MiKo_3015](/Documentation/MiKo_3015.md)|对无参数方法的非适当状态使用 InvalidOperationExceptions|✓|✓| |[MiKo_3016](/Documentation/MiKo_3016.md)|不要为属性返回值抛出 ArgumentNullException|✓|✓| |[MiKo_3017](/Documentation/MiKo_3017.md)|在抛出新异常时包含原始异常|✓|✓| |[MiKo_3018](/Documentation/MiKo_3018.md)|在可释放类型的公共方法上抛出 ObjectDisposedExceptions|✓|\-| |[MiKo_3020](/Documentation/MiKo_3020.md)|使用 'Task.CompletedTask' 而不是 'Task.FromResult'|✓|✓| |[MiKo_3021](/Documentation/MiKo_3021.md)|不要在实现中使用 'Task.Run'|✓|\-| |[MiKo_3022](/Documentation/MiKo_3022.md)|不要返回 Task<IEnumerable> 或 Task<IEnumerable<T>>|✓|\-| |[MiKo_3023](/Documentation/MiKo_3023.md)|不要将 'CancellationTokenSource' 用作参数|✓|\-| |[MiKo_3024](/Documentation/MiKo_3024.md)|不要在引用参数上使用 [ref] 关键字|✓|\-| |[MiKo_3025](/Documentation/MiKo_3025.md)|不要重新分配方法参数|✓|\-| |[MiKo_3026](/Documentation/MiKo_3026.md)|删除未使用的参数|✓|\-| |[MiKo_3027](/Documentation/MiKo_3027.md)|不要为未来使用保留参数|✓|\-| |[MiKo_3028](/Documentation/MiKo_3028.md)|不要为 lambda 参数分配 null|✓|\-| |[MiKo_3029](/Documentation/MiKo_3029.md)|防止事件注册中的内存泄漏|✓|\-| |[MiKo_3030](/Documentation/MiKo_3030.md)|在方法中遵循迪米特法则(Law of Demeter)|\-|\-| |[MiKo_3031](/Documentation/MiKo_3031.md)|不要实现 ICloneable.Clone()|✓|\-| |[MiKo_3032](/Documentation/MiKo_3032.md)|使用 'nameof' 而不是 Cinch 来表示 PropertyChangedEventArgs 属性名称|✓|✓| |[MiKo_3033](/Documentation/MiKo_3033.md)|对 PropertyChangingEventArgs 和 PropertyChangedEventArgs 中的属性名称使用 'nameof'|✓|✓| |[MiKo_3034](/Documentation/MiKo_3034.md)|对 PropertyChanged 事件引发器使用 [CallerMemberName] 属性|✓|✓| |[MiKo_3035](/Documentation/MiKo_3035.md)|始终为 'WaitOne' 方法指定超时时间|✓|\-| |[MiKo_3036](/Documentation/MiKo_3036.md)|使用 'TimeSpan' 工厂方法而不是构造函数|✓|✓| |[MiKo_3037](/Documentation/MiKo_3037.md)|不要对超时使用魔术数字|✓|\-| |[MiKo_3038](/Documentation/MiKo_3038.md)|不要使用魔术数字|✓|\-| |[MiKo_3039](/Documentation/MiKo_3039.md)|不要在属性中使用 Linq 或 yield|✓|\-| |[MiKo_3040](/Documentation/MiKo_3040.md)|当可能需要超过 2 个值时,使用枚举而不是布尔值|✓|\-| |[MiKo_3041](/Documentation/MiKo_3041.md)|不要在 EventArgs 中使用委托|✓|\-| |[MiKo_3042](/Documentation/MiKo_3042.md)|不要在 EventArgs 中实现接口|✓|\-| |[MiKo_3043](/Documentation/MiKo_3043.md)|对 WeakEventManager 事件(注销)注册使用 'nameof'|✓|✓| |[MiKo_3044](/Documentation/MiKo_3044.md)|使用 'nameof' 来比较 PropertyChangingEventArgs 和 PropertyChangedEventArgs 的属性名称|✓|✓| |[MiKo_3045](/Documentation/MiKo_3045.md)|对 EventManager 事件注册使用 'nameof'|✓|✓| |[MiKo_3046](/Documentation/MiKo_3046.md)|对属性引发方法中的属性名称使用 'nameof'|✓|✓| |[MiKo_3047](/Documentation/MiKo_3047.md)|对应用的 [ContentProperty] 属性使用 'nameof'|✓|✓| |[MiKo_3048](/Documentation/MiKo_3048.md)|将 [ValueConversion] 属性应用于 ValueConverters|✓|\-| |[MiKo_3049](/Documentation/MiKo_3049.md)|将 [Description] 属性应用于枚举成员|✓|\-| |[MiKo_3050](/Documentation/MiKo_3050.md)|将 DependencyProperty 字段声明为 'public static readonly'|✓|✓| |[MiKo_3051](/Documentation/MiKo_3051.md)|正确注册 DependencyProperty 字段|✓|✓| |[MiKo_3052](/Documentation/MiKo_3052.md)|将 DependencyPropertyKey 字段声明为非公开的 'static readonly'|✓|✓| |[MiKo_3053](/Documentation/MiKo_3053.md)|正确注册 DependencyPropertyKey 字段|✓|\-| |[MiKo_3054](/Documentation/MiKo_3054.md)|为只读 DependencyProperties 公开 DependencyProperty 标识符|✓|✓| |[MiKo_3055](/Documentation/MiKo_3055.md)|在 ViewModels 中 INotifyPropertyChanged|✓|\-| |[MiKo_3060](/Documentation/MiKo_3060.md)|不要使用 Debug.Assert 或 Trace.Assert|✓|✓| |[MiKo_3061](/Documentation/MiKo_3061.md)|为日志记录器使用正确的日志类别|✓|\-| |[MiKo_3062](/Documentation/MiKo_3062.md)|以冒号结束异常日志消息|✓|✓| |[MiKo_3063](/Documentation/MiKo_3063.md)|以句号结束非异常日志消息|✓|✓| |[MiKo_3064](/Documentation/MiKo_3064.md)|不要在日志消息中使用缩写 "n't"|✓|✓| |[MiKo_3065](/Documentation/MiKo_3065.md)|不要在 Microsoft Logging 调用中使用内插字符串|✓|✓| |[MiKo_3070](/Documentation/MiKo_3070.md)|不要为 IEnumerable 返回 null|✓|\-| |[MiKo_3071](/Documentation/MiKo_3071.md)|不要为 Task 返回 null|✓|\-| |[MiKo_3072](/Documentation/MiKo_3072.md)|不要从非私有方法中返回 'List<>' 或 'Dictionary<>'|✓|\-| |[MiKo_3073](/Documentation/MiKo_3073.md)|完全初始化对象|✓|\-| |[MiKo_3074](/Documentation/MiKo_3074.md)|不要在构造函数上定义 'ref' 或 'out' 参数|✓|\-| |[MiKo_3075](/Documentation/MiKo_3075.md)|将内部和私有类型标记为 static 或 sealed,除非需要派生|✓|✓| |[MiKo_3076](/Documentation/MiKo_3076.md)|不要使用下方或其它类型部分中的静态成员来初始化静态成员|✓|\-| |[MiKo_3077](/Documentation/MiKo_3077.md)|为返回 Enum 的属性提供默认值|✓|✓| |[MiKo_3078](/Documentation/MiKo_3078.md)|为枚举成员提供默认值|✓|✓| |[MiKo_3079](/Documentation/MiKo_3079.md)|以十六进制形式写入 HResults|✓|✓| |[MiKo_3080](/Documentation/MiKo_3080.md)|对变量赋值使用 'switch ... return' 而不是 'switch ... break'|✓|\-| |[MiKo_3081](/Documentation/MiKo_3081.md)|使用模式匹配而不是逻辑非条件|✓|✓| |[MiKo_3082](/Documentation/MiKo_3082.md)|使用模式匹配而不是与 'true' 或 'false' 进行比较|✓|✓| |[MiKo_3083](/Documentation/MiKo_3083.md)|使用模式匹配进行 null 检查|✓|✓| |[MiKo_3084](/Documentation/MiKo_3084.md)|将变量而不是常量放在比较的左侧|✓|✓| |[MiKo_3085](/Documentation/MiKo_3085.md)|保持条件语句简短|✓|✓| |[MiKo_3086](/Documentation/MiKo_3086.md)|不要嵌套条件语句|✓|\-| |[MiKo_3087](/Documentation/MiKo_3087.md)|不要使用否定的复杂条件|✓|\-| |[MiKo_3088](/Documentation/MiKo_3088.md)|使用模式匹配进行非 null 检查|✓|✓| |[MiKo_3089](/Documentation/MiKo_3089.md)|不要在 'if' 语句中使用简单的常量属性模式作为条件|✓|✓| |[MiKo_3090](/Documentation/MiKo_3090.md)|不要在 finally 块中抛出异常|✓|\-| |[MiKo_3091](/Documentation/MiKo_3091.md)|不要在 finally 块中引发事件|✓|\-| |[MiKo_3092](/Documentation/MiKo_3092.md)|不要在锁中引发事件|✓|\-| |[MiKo_3093](/Documentation/MiKo_3093.md)|不要在锁内调用委托|✓|\-| |[MiKo_3094](/Documentation/MiKo_3094.md)|不要在锁内调用参数的方法或属性|✓|\-| |[MiKo_3095](/Documentation/MiKo_3095.md)|不要使用空的代码块|✓|\-| |[MiKo_3096](/Documentation/MiKo_3096.md)|使用字典而不是大型 switch 语句|✓|\-| |[MiKo_3097](/Documentation/MiKo_3097.md)|不要先转换为类型再返回 object|✓|\-| |[MiKo_3098](/Documentation/MiKo_3098.md)|为抑制的消息提供有意义的解释|✓|\-| |[MiKo_3099](/Documentation/MiKo_3099.md)|不要将枚举值与 null 进行比较|✓|✓| |[MiKo_3100](/Documentation/MiKo_3100.md)|将测试类放置在与被测类型相同的命名空间中|✓|\-| |[MiKo_
标签:MiKo-Analyzers, NuGet包, Roslyn, SOC Prime, Visual Studio, 云计算, 代码分析, 代码审查, 代码度量, 代码规范, 凭证管理, 命名规则, 多人体追踪, 开发工具, 编译器, 规则引擎, 重构, 错误基检测, 静态代码分析, 静态检查