c# - 将 C# 丢弃运算符用于方法返回值是否有意义?
问题描述
Visual Studio 2019 的代码分析和代码建议开始突出显示我调用返回值但根本不使用该值的方法的每一行代码,并告诉我使用丢弃运算符_
。
我不完全理解为什么这很重要,甚至对于 Fluent API 样式代码来说似乎是错误的。
以下两行之间是否存在功能差异?
private int SomeMethod() => 0;
...
SomeMethod();
_ = SomeMethod();
...
如果返回值是参考,会更重要吗?如果没有,有没有办法全局禁用此检查?
解决方案
摘自微软文档:
从 C# 7.0 开始,C# 支持丢弃,这是在应用程序代码中有意使用的临时虚拟变量。丢弃相当于未赋值的变量;它们没有价值。因为只有一个丢弃变量,并且该变量甚至可能没有分配存储空间,所以丢弃可以减少内存分配。因为它们使代码的意图清晰,所以它们增强了代码的可读性和可维护性。
完成所有代码分析以帮助改进整体编码。有时我们会在项目早期编写返回简单值的快速方法。在重构期间,无论出于何种原因,我们都会停止使用此类变量。代码分析只是指出了这一点。作为开发人员,您可以说,嘿,让我重构方法以不返回变量,因为我们不需要它。这完全取决于您团队的开发风格。
验证您的问题,我正在运行 VS2019 16.0.0 Preview 5.0,问题就在那里。
根据@MartinUllrich 的评论,我升级到了 16.1.0 预览版 2.0。警告消失了。您还可以使用 #pragma 指令禁用警告
您还可以抑制整个项目的警告。
推荐阅读
- pandas - AWS SageMaker 批量转换 CSV 错误:未引用字段中的“裸露”
- java - Java非常奇怪地处理大量数字
- r - 根据第 n 次出现的分隔符将一列分成两列
- python - 当 ANSI 转义序列字符在字符串中时,Python 字符串格式被忽略
- ruby-on-rails - 如何在我的 Rails 应用程序中执行操作之前确定延迟的原因?
- javascript - 针对过滤方法上的所有元素的事件侦听器
- unix - 将源脚本封装在 zsh 中
- c - C - Scanf 直接进入函数参数?
- unity3d - 我如何检测我的玩家是否正在触摸游戏对象?
- excel - Excel VBA - 以编程方式列出用户窗体上控件的可用事件过程