【问题标题】:StyleCop SA1402 and GenericsStyleCop SA1402 和泛型
【发布时间】:2020-01-31 07:48:51
【问题描述】:

我认为 SA1402 是一个很好的规则,但我对泛型有疑问。我有一个使用Func 委托的类,因此名称与该签名大致平行。也就是说,我有名为Operation<TType>Operation<T, TType>Operation<T1, T2, TType> 等的类。根据SA1402,我需要将所有这些小类放在单独的文件中,并为文件名想出一些奇怪的装饰。此外,如果我需要更改其中一项,我通常需要对其余部分进行更改。这似乎比单个模块更难支持。

SA1402 允许相同基本类(以及部分)的泛型驻留在一个文件中是否有意义?在这种情况下,Operation 类的所有排列都将驻留在“Operation.cs”中。

【问题讨论】:

标签: c# generics stylecop


【解决方案1】:

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

操作[TType].cs

操作[T,TType].cs

操作[T1, T2, TType].cs

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

操作`1.cs

操作`2.cs

操作`3.cs

(见Convention for Filenames of Generic Classes

【讨论】:

    【解决方案2】:

    我倾向于同意你的观点,总的来说,SA1402 是个好主意。但在这种特定情况下,以及其他类似的情况下 (i have a generic and non-generic implementation of the same class)。像许多其他人一样,我认为having more than one class per file is totally fine if it makes sense。我选择在非常具体的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>")]
    

    【讨论】:

    • 您已经在具有一种类型参数的泛型类上指定了目标 - 您有关于如何用一种以上类型参数标注泛型类的任何参考吗?
    • 我没有参考,但是使用Visual Studio生成它的时候出现:[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:Elements should be documented", Justification = "&lt;Pending&gt;", Scope = "type", Target = "~T:Mitre.CliApp.IO.CircularBuffer`2")]。另外,可能值得注意的是,我认为您不能在同一行上拥有多个目标。
    【解决方案3】:

    如果您已覆盖 StyleCop 的 fileNamingConvention 设置 (File naming conventions),则使用 Operation&lt;TType&gt;.cs 方法将起作用。

    否则,如果您将文件命名为:Operation{TType}.cs 等,它会自动运行(注意花括号)

    【讨论】:

    • 是的,我知道如何覆盖 Stylecop 设置。整个想法是更改您的代码,以便您在不更改设置的情况下通过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多