gpt4 book ai didi

c# - 如何配置 ReSharper 以接受 [Required](来自 PostSharp)等同于 [NotNull](反之亦然)?

转载 作者:行者123 更新时间:2023-11-30 16:45:55 26 4
gpt4 key购买 nike

我在各种项目中同时使用 PostSharp 和 ReSharper,特别是利用 PostSharp 的代码契约执行和 ReSharper 的注解以获得更好的代码。

问题是,当涉及到可空性时,我最终得到了很多参数等,声明如下所示:

public void Foo ([Required] [JetBrains.Annotations.NotNull] object bar)

...为了既强制执行前者又注释后者 bar 不能为空。

有没有一种方法可以配置 ReSharper 以将 [Required] 属性的存在视为等同于 [NotNull] 用于注释目的,或其他一些方法(我不特别说明如何)以避免必须为每个非空参数等重复这样的方法?

最佳答案

this documentation page 所述, ReSharper 实际上可以识别自定义注释,即使它们是在“JetBrains.Annotations”以外的命名空间中定义的。因此,您可以定义自己的自定义注释,并将其中的一些注释转换为将代码契约应用于目标元素的方面提供程序。

首先,打开“ReSharper 选项” | “代码注释”并单击“将 C# 实现复制到剪贴板”。此外,取消选中“内部”以跨项目重用注释。

然后新建一个代码文件,贴上注释。您可以重命名命名空间(例如 MyAnnotations)。如果您选择使用自定义命名空间,您需要再次打开“ReSharper 选项”并在“自定义命名空间应在下面的列表中标记”中选中您的自定义命名空间旁边的复选框。

现在您可以找到NotNullAttribute 并按以下方式更改其源代码:

public sealed class NotNullAttribute : LocationLevelAspect, IAspectProvider
{
public IEnumerable<AspectInstance> ProvideAspects(object targetElement)
{
var requiredConstruction = new ObjectConstruction( typeof( PostSharp.Patterns.Contracts.RequiredAttribute ) );
yield return new AspectInstance( targetElement, requiredConstruction, null );
}
}

您可以在您的代码中应用此自定义属性,它将同时用作 PostSharp 方面和 ReSharper 注释。

public void Foo ([MyAnnotations.NotNull] object bar)

关于c# - 如何配置 ReSharper 以接受 [Required](来自 PostSharp)等同于 [NotNull](反之亦然)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41253375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com