StyleCop SA1402 and Generics
本文关键字:Generics and SA1402 StyleCop | 更新日期: 2023-09-27 18:29:41
我认为SA1402是一个很好的规则,但我对泛型有问题。我有一个使用Func
委托的类,所以名称与签名大致相似。也就是说,我有Operation<TType>
、Operation<T, TType>
、Operation<T1, T2, TType>
等类。根据SA1402,我需要将所有这些小类放在单独的文件中,并对文件名进行一些奇怪的修饰。此外,如果我需要更改其中一个项目,我通常需要对其余项目进行更改。这似乎比单个模块更不受支持。
SA1402允许相同基类的泛型(以及分部)驻留在一个文件中有意义吗?在这种情况下,类Operation
的所有排列都将位于"Operation.cs"中。
它们是几种命名约定。似乎最受欢迎的是
操作[TType].cs
操作[T,TType].cs
操作[T1,T2,TType].cs
但你也可以使用更经典的东西,比如
操作`1.cs
操作`2.cs
操作`3.cs
(参见泛型类文件名的约定)
我倾向于同意你的观点,总的来说,SA1402是个好主意。但在这个特定的情况下,以及其他类似的情况下(我有一个类的泛型和非泛型实现)。像许多其他人一样,我认为每个文件有一个以上的类是完全可以的,如果它有意义的话。我选择在非常特定的Scope
和Target
级别忽略此警告:
[assembly: SuppressMessage(
"StyleCop.CSharp.MaintainabilityRules",
"SA1402:FileMayOnlyContainASingleType",
Justification = "How else would we name generic and non generic (https://stackoverflow.com/a/4063061/516433).",
Scope = "type",
Target = "~T:Pastdev.Cli.AppResources`1<!!0>")]
如果覆盖了StyleCop的fileNamingConvention
设置(文件命名约定),则使用Operation<TType>.cs
方法将有效。
否则,如果您将文件命名为:Operation{TType}.cs
等,它会自动工作。(注意大括号)