CanBeNull 和 ReSharper - 将其与异步任务一起使用?

2023-12-29

我最近发现你可以使用[CanBeNull]C# 中的注释告诉 ReSharper(和其他插件)某个方法可以返回 null。这很棒,因为当我没有处理这些情况时,它会让 ReSharper 提醒我。

然而,对于async返回 a 的方法Task or a Task<T>,该行为是意外的。

例如,考虑这个例子:

[CanBeNull]
public async Task<string> GetSomeName() {
    var time = DateTime.Now;
    if(time.Second == 30) { 
        return "Jimmy"; 
    } else {
        return null;
    }
}

我知道这种情况有点奇怪,但为了简单起见,请耐心等待。如果我(启用了 ReSharper)然后尝试在其他地方调用该方法,它会发出错误警告。例如:

var myValue = await GetSomeName();
var subValue = myValue.Trim(); //here, ReSharper should warn me that subValue is null.

在这里,ReSharper 在错误的地方警告我。第一行生成一个警告(它声称任务本身实际上可以为空,这是错误的)。第二行不会生成警告,而警告应该在此处。

如果我要完全遵守 ReSharper,则必须编写以下代码:

var myTask = GetSomeName();
if(myTask != null) { 
    //this is silly, and is always true, but ReSharper thinks that the Task can be null due to the CanBeNull attribute.

    var myValue = await myTask;
    var subValue = myValue.Trim(); //this could generate an error, but ReSharper doesn't warn me.

}

这是我应该提交的 ReSharper 错误吗?或者我错误地使用了注释?我想我们都同意任务本身不可能null,所以我不知道这有什么意义。


伊万·塞尔杜克在这里说 https://youtrack.jetbrains.com/issue/RSRP-376091#focus=Comments-27-1054764.0-0:

从 ReSharper 9.2 EAP4 属性开始“项目可以为空” https://www.jetbrains.com/help/resharper/Reference__Code_Annotation_Attributes.html#ItemCanBeNullAttribute and “项目不为空” https://www.jetbrains.com/help/resharper/Reference__Code_Annotation_Attributes.html#ItemNotNullAttribute可以应用于“Task”和“Lazy”类型的实体

它工作完美!

附:请不要忘记更新 JetBrains Annotations。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CanBeNull 和 ReSharper - 将其与异步任务一起使用? 的相关文章

  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 为什么#pragma optimize("", off)

    我正在审查一个 C MFC 项目 在某些文件的开头有这样一行 pragma optimize off 我知道这会关闭所有以下功能的优化 但这样做的动机通常是什么 我专门使用它来在一组特定代码中获得更好的调试信息 并在优化的情况下编译应用程序
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我

随机推荐

  • 如何将WebResponse.GetResponseStream返回转换为字符串?

    我看到很多例子 但它们都缓慢地将它们读入字节数组或一次 256 个字符 为什么 是否不建议只转换结果Stream值转换为字符串 我可以在其中解析它 您可以使用StreamReader ReadToEnd using Stream strea
  • 获取没有标题/通知栏的窗口大小

    我一直在研究 Android 开发 我想做的一件事就是为我的窗口动态创建背景图像 类似于下面的图像 这是来自我的黑莓应用程序 它由三个独立的部分组成 右下角徽标 左上水印和右下角名称 它的工作与屏幕尺寸无关 因为黑莓应用程序只获取所有三个部
  • 在写入文件之前检查文件是否可写

    我正在尝试创建一个脚本 在写入文件之前检查文件是否可写 确保脚本不会过早退出 我已经走到这一步了 meta stream get meta data file while is writable meta uri sleep rand 0
  • 在元素不存在的地方插入数组,否则更新它(有多个条件)

    id 1 name apple option weight 10 size 40 price 40 weight 40 size 40 price 200 如果重量或大小不同 我想在数组中更新插入新对象 如果大小和重量都匹配 我想更新它 我
  • Bootstrap 弹出框不起作用

    引导弹出窗口没有显示我的页面 这是我的 HTML
  • 在 bash 中,如何从由 tee 管道传输的函数中退出脚本?

    我试图理解为什么每当我使用function 2 gt 1 tee a LOGtee 在函数中创建一个无法通过简单退出的子 shellexit 1 如果我不使用tee它工作正常 下面的例子 bin bash LOG root log log
  • XElement 无法加载带有重音字符的文件

    我有一个相当好奇的问题 使用 XElement 加载方法加载 html 文档 使用 HTML Tidy 检查格式良好 它对于英语文档绝对完美 但是转到法语和西班牙语文档时 我会看到一个XML 异常 XML Exception Invalid
  • Node JS - 读取文件属性

    我正在使用 NWJS 开发桌面应用程序 我需要获取 exe 文件的文件属性 我尝试过使用 npm 属性模块https github com gagle node properties https github com gagle node
  • 在我的例子中奇怪的 ul 列表问题

    我的 ul 列表有一个奇怪的问题 我有类似的东西 section h1 Slide h1 div class break div div a href img src images left nav png a div ul li img
  • numpy 在数组开头添加元素并在末尾删除元素

    在 numpy 数组的开头添加新元素并删除该数组的最后一个元素的最佳方法是什么 我使用了这样的代码 tmp np array 1 2 3 print tmp tmp np insert tmp 0 0 tmp np delete tmp 1
  • iOS PWA Safari 打不开页面?

    如果我在我的 iPad Pro 11 英寸上执行以下操作 关闭 Wifi 并打开飞行模式 打开我们的 iOS PWA 它说 Safari 无法打开该页面 http www example com http www example com 因
  • 将数组作为指针引用

    我似乎无法理解数组或二维数组上不同声明之间的区别 例如 void swap char a char b char t a a b b t int main int argc char argv char a asher char b sab
  • 从可变参数类型列表中获取最大的类型

    我正在尝试从可变参数模板类型列表中获取最大的类型 我得到了意想不到的结果 Bigger between two types template
  • C语言中fflush(stdin)有什么用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有以下程序 include
  • 在 Python 3 中使用 OpenPyXL 复制整个列

    我正在尝试使用 OpenPyXL 复制整个列 谷歌似乎提供了很多使用范围的示例 但不是针对整个列 我有一个工作簿 其中只有一个工作表 A 列和 JX 列中包含大量日期 A 包含每月日期 JX 包含季度日期 我希望将每月日期列 在 A A 中
  • Java 中转换为泛型类型时的警告

    我有一些通用代码 我无法弄清楚如何合法地防止收到警告 我目前正在使用 SuppressWarnings unchecked 因为似乎在没有警告的情况下无法完成泛型类型的转换 我怎样才能摆脱注释 我所拥有的是 public MyObject
  • 部分分组在子文件夹中

    我的观点依赖于几个部分 为了对这些部分进行分组 我将它们移动到一个子文件夹中 但是当我调用部分时 我得到了一个Missing template client demographics age erb in view path app vie
  • Linq 确实比 Foreach 更快吗?

    如果您搜索 Linq 比 Foreach 更快 那么答案始终是 no foreach is 我还发现了另一个 stackoverflow 问题提问者没有做 热身 https stackoverflow com questions 17147
  • 检测因用户操作而中断的 Ajax 请求

    我想检测 Ajax 调用正在进行中然后由于某些用户操作 例如用户导航到另一个页面 而中断的情况 我可以看到 当发生这种情况时 我的 onreadystatechange 处理程序会被调用 并显示 readyState 4 DONE 和 st
  • CanBeNull 和 ReSharper - 将其与异步任务一起使用?

    我最近发现你可以使用 CanBeNull C 中的注释告诉 ReSharper 和其他插件 某个方法可以返回 null 这很棒 因为当我没有处理这些情况时 它会让 ReSharper 提醒我 然而 对于async返回 a 的方法Task o