gpt4 book ai didi

c# - ReSharper [CanBeNull] 和 [NotNull] 属性可以应用于 Action 或 Func 参数吗?

转载 作者:太空狗 更新时间:2023-10-30 01:13:35 25 4
gpt4 key购买 nike

ReSharper 有一套代码注释,可用于显式表达 IDE 可以使用的代码意图。两个最有用的注释是 [CanBeNull][NotNull] 属性,它们可以用在构造函数、属性和方法上,如下所示:

[CanBeNull]
private Foo DoSomething([NotNull] string text)
{
// ...
}

希望不大,但是有什么方法可以将这些属性分配给 Action 或 Func 参数吗?

我知道下面的代码是非法的(因为 type arguments are not a valid target for attributes ),但是否有其他表达方式?

private void DoSomething(Action<[NotNull]string> processText)
{
///...
}

最佳答案

如果您愿意创建自定义委托(delegate)类型,则可以这样做:

    delegate void TextProcessor([NotNull] string text);

delegate void NullableTextProcessor([CanBeNull] string text);

private void DoSomething([NotNull] TextProcessor processText)
{
// ...
}

private void DoSomethingNull([NotNull] NullableTextProcessor processText)
{
// ...
}

Delegates

不幸的是,CanBeNull 似乎没有在 lambda 语法中给出警告:

Calls

但您可能只想等待 C# 8 的可空/不可空引用类型。

关于c# - ReSharper [CanBeNull] 和 [NotNull] 属性可以应用于 Action 或 Func 参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49454008/

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