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"中。

StyleCop SA1402 and Generics

它们是几种命名约定。似乎最受欢迎的是

操作[TType].cs

操作[T,TType].cs

操作[T1,T2,TType].cs

但你也可以使用更经典的东西,比如

操作`1.cs

操作`2.cs

操作`3.cs

(参见泛型类文件名的约定)

我倾向于同意你的观点,总的来说,SA1402是个好主意。但在这个特定的情况下,以及其他类似的情况下(我有一个类的泛型和非泛型实现)。像许多其他人一样,我认为每个文件有一个以上的类是完全可以的,如果它有意义的话。我选择在非常特定的ScopeTarget级别忽略此警告:

[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等,它会自动工作。(注意大括号)