如何避免不相关的可为空警告(无需显式抑制)

2023-11-28

有没有办法让分析器理解变量Bar对于以下情况有值吗?

#nullable enable 
class Foo {
   bool GenerateArray => Bar.HasValue;
   int? Bar { get; set; }
   void FooBar() {
     var data = (GenerateArray) ? new int[Bar.Value] : null;
   }
}

有警告“可空值类型可能为空”。为了Bar.Value但显然不可能。

我知道有两种方法可以避免出现警告。两者都有缺点:

  1. Using Bar.HasValue直接代替属性GenerateArray。然而使用GenerateArray提高可读性。
  2. Using Bar!.Value代替Bar.Value。但是,如果有人更改代码,例如,通过GenerateArray将来的自动属性时,该警告可能会再次相关,但不会出现。

这里的问题与这个问题,其中使用局部变量而不是属性。如果我理解正确的话,下面接受的答案适用于该属性(一旦 C# 9 发布),但不适用于局部变量。因此,这个问题不是重复的。


将能够使用MemberNotNullWhenC# 9 中的属性(当前处于预览状态):

[MemberNotNullWhen(true, "Bar")]
bool GenerateArray => Bar.HasValue;

.Net 5中将存在相关的属性类型:

namespace System.Diagnostics.CodeAnalysis
{
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
    public sealed class MemberNotNullAttribute : Attribute
    {
        public MemberNotNullAttribute(params string[] members) { }
        public MemberNotNullAttribute(string member) { }
    }
}

namespace System.Diagnostics.CodeAnalysis
{
    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
    public sealed class MemberNotNullWhenAttribute : Attribute
    {
        public MemberNotNullWhenAttribute(bool when, params string[] members) { }
        public MemberNotNullWhenAttribute(bool when, string member) { }
    }
}

Sharplab 上的插图

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

如何避免不相关的可为空警告(无需显式抑制) 的相关文章

  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 捕获 .aspx 和 .ascx 页面中的异常

    问题说明了一切 请看以下示例代码 ul li li ul
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • Android NDK 代码中的 SIGILL

    我在市场上有一个 NDK 应用程序 并获得了有关以下内容的本机崩溃报告 SIGILL信号 我使用 Google Breakpad 生成本机崩溃报告 以下是详细信息 我的应用程序是为armeabi v7a with霓虹灯支持 它在 NVIDI
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • Unity c# 四元数:将 y 轴与 z 轴交换

    我需要旋转一个对象以相对于现实世界进行精确旋转 因此调用Input gyro attitude返回表示设备位置的四元数 另一方面 这迫使我根据这个四元数作为默认旋转来计算每个旋转 将某些对象设置为朝上的简单方法如下 Vector3 up I
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • C++ 指针引用混淆

    struct leaf int data leaf l leaf r struct leaf p void tree findparent int n int found leaf parent 这是 BST 的一段代码 我想问一下 为什么
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如果将变量设置为等于新对象,旧对象会发生什么?

    假设我们有一个 X 类not有一个超载的operator 功能 class X int n X n 0 X int n n n int main X a 1 an object gets constructed here more code
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 从后面的代码添加外部 css 文件

    我有一个 CSS 文件 例如 SomeStyle css 我是否可以将此样式表文档从其代码隐藏应用到 aspx 页面 您可以将文字控件添加到标头控件中 Page Header Controls Add new System Web UI L

随机推荐

  • 如何获取Vine视频地址

    I love vinepeek并想让事情变得更好 我有 Vine 链接 例如http vine co v bJqWrOHjMmU 但是这是页面链接 而不是视频 URL 我知道它是新的 但是 Vine 有 API 或者我怎样才能获取视频的 u
  • 为什么 java.util.Observable 不是抽象类?

    我刚刚注意到 java util Observable 是一个具体的类 由于 Observable 的目的是扩展 这对我来说似乎很奇怪 这样做有什么原因吗 I found 本文上面说 observable 是一个具体的类 因此必须预先确定从
  • 为什么 ftell( stdin ) 会导致非法查找错误

    以下代码输出 非法查找 include
  • Node Js 上的 Axios 不会保留请求服务器上的会话,而 PostMan 会保留

    我可以在 PostMan 上执行以下操作 1 POST方法登录公司服务器 2 以登录用户的身份在公司服务器上发出其他请求 我创建了一个nodejs应用程序来与公司服务器进行通信 我正在使用 axios 库进行上述通信 登录公司服务器后 任何
  • 使用 python xlib 全局捕获、忽略和发送按键事件,识别虚假输入

    我想在普通键盘上实现按键和弦 我想我使用 python xlib 为此 程序必须全局吞下所有关键事件 然后才允许它们通过 我当前的测试只是抓住 1 键 如果按下此键 它将调用一个处理程序 该处理程序通过 xtest fake input 将
  • OpenCV Python 中与多个对象的模板匹配

    我正在尝试使用 opencv python 在图像中查找多个模板 根据这个链接 但问题是 为单个对象返回多个位置略有不同的点 像这样的东西 我不想用cv2 minMaxLoc 因为图像中有多个模板 我写了一个删除平仓头寸的函数 但我想知道这
  • Silverlight 4 - 将 UIElement 渲染为图像

    我有一个UIElement我想捕获用户单击按钮时的快照 当用户单击按钮时 我想采取UIElement并将其当前状态加载到 Image 元素中 我如何渲染UIElement as an Image 假设FrameworkElement你想要渲
  • Smarty 基准测试,有人吗?

    我正在考虑将 Smarty 作为我的 Web 应用程序模板解决方案 现在我担心它相对于普通 PHP 的性能 Smarty 网站说它应该是相同的 但是 我找不到任何人进行真正的基准测试来证明该声明是对还是错 有人做过 Smarty 与普通 P
  • MSVC 大括号初始化与双打似乎违反了标准?

    看看这个简单的程序 int main float f2 7 2 OK with warning float f3 7 199999809265137 OK no warning float f4 7 2 Fails float f5 7 1
  • jQuery ui datepicker向下滚动网页时定位问题

    我有一个使用 jQuery ui 日期选择器的多个实例的网页 我的网页将显示约 80 条记录 这超出了单个屏幕截图的范围 div class recordname div lt additional html here gt 我已将日期选择
  • Android 10:通过 MediaStore 获取带有位置信息的图库

    查看 Android 10 中引入的存储访问更改here 现在默认编辑位置信息 Google 要求我们致电setRequireOriginal 在 MediaStore 对象上 以媒体的 uri 作为参数 当您一张一张地获取媒体时 这是可行
  • 如何每2分钟调用一次函数

    如何在 AngularJS 中每两分钟调用一次保存函数 请帮我 scope save function http url api products method POST data scope product success functio
  • Javascript/HTML5:获取音频标签的当前时间

    我的模板中有一个音频标签 我需要在单击按钮时显示它的当前时间 请检查我下面的代码 var myaudio document getElementsByTagName audio 0 var cur time myaudio currentT
  • 使用BluetoothChat与ELM327通信

    我目前正在尝试通过 BluetoothChat 示例应用程序与 ELM327 OBDII 蓝牙适配器进行通信 我可以连接 因为我更改了 UUID 但是我只能接收启动命令和提示 gt 来发送命令 每当我尝试发送命令时 我都会收到以下信息 CA
  • 为什么 in_array() 返回意外/奇怪的结果?

    Why is in array 有时行为如此奇怪并返回如此意想不到的结果 让我们看几个例子 arrayWithTrue Andreas Philipp true arrayWithNull 1 2 3 null arrayWithMinus
  • 如何签署 JWT 以从 Azure Active Directory 交换访问令牌?

    我正在用nodejs编码 我指的是这个文档 https learn microsoft com en us azure active directory develop v1 oauth2 client creds grant flow s
  • Xcode 中的优化级别

    我用谷歌搜索了这个问题以澄清一些基本概念 但没有找到合适的答案 在 Swift 编译器和 Apple LLVM Objective C 的 Xcode 构建设置中 有多少个优化级别可用于代码生成 Swift 提供了四种不同的优化级别 Ono
  • 以编程方式构建项目

    我需要以编程方式为我正在动态创建的 csproj 构建一个项目 在搜索 Google 时 我发现了 MS 为 MSBuild 引擎提供的类和 API 有了这些信息 我创建了一个执行 msbuild exe 的进程 然后读取输出 但现在我想使
  • Android UnknownHostException Facebook SDK

    情况是这样的 我的应用程序运行良好 并且能够与 URL 建立连接 但在让应用程序运行几个小时后 Facebook 请求突然给了我以下错误 09 26 10 01 25 175 W System err 252 java net Unknow
  • 如何避免不相关的可为空警告(无需显式抑制)

    有没有办法让分析器理解变量Bar对于以下情况有值吗 nullable enable class Foo bool GenerateArray gt Bar HasValue int Bar get set void FooBar var d