可空字符串 (string?) 和初始化为可原谅空值的字符串 (字符串 s = null!) 之间有什么区别

2024-01-10

可空字符串 (string?) 和初始化为可原谅空值的字符串 (字符串 s = null!) 之间有什么区别

public string? nullableString {get;set;} = null;
public string forgiveString {get;set;} = null!

在某些情况下您会想使用其中一种而不是另一种吗?它们在功能上等效吗?


可空字符串 (string?) 和初始化为可原谅空值的字符串 (字符串 s = null!) 之间有什么区别

One is correct。另一个是真蠢.

在某些情况下您会想使用其中一种而不是另一种吗?

笔者认为,不会。

...但是有are很多情况下!由于 C# 可空引用类型功能的当前限制,需要Expression<>, ValueTuple,Linq,但属性初始化不是其中之一:如果属性“从不”null“那么财产must在构造函数或初始值设定项中分配(从 C# 11 开始:使用required修饰符),因此使用= null!初始化属性是不必要的,也是不正确的。

如果您确实有无法使用可空引用类型的遗留代码,或者使用某些运行时系统进行初始化的代码(例如DbSet<T>属性在DbContext在实体框架中)然后使用作用域#pragma and #nullable抑制警告的指令而不是!并且始终添加解释性评论来证明原因,这样你的下一个可怜的同事就不必费力去理解发生了什么。

它们在功能上等效吗?

No.

类成员声明public string Foo { get; set; } 是一份合同 https://stackoverflow.com/questions/15914298/how-to-understand-the-meaning-of-contract说的是 ”Foo永远不会null: 它会always可以安全地取消引用String-引用该属性的getter返回,并且传递a是非法的null引用属性设置器。”

踢脚线规则 = null!就像在说“这个财产永远不会null,除非是。Have fun”。别这样做。


Another不做的理由= null! with DbContext's DbSet<T>属性是因为引用类型字段总是初始化为null无论如何在填充之前DbContext的构造函数(例如 EF6 使用其magical DbContext.DiscoverAndInitializeSets()方法),因此显式初始化引用类型属性为null当它被设置为非null超类构造函数的对象引用是多余的。

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

可空字符串 (string?) 和初始化为可原谅空值的字符串 (字符串 s = null!) 之间有什么区别 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 我应该使用 YUI 压缩机还是新的 Google Closure 编译器来压缩 JavaScript?

    YUI Compressor 是公认的最佳最小化工具 但 Closure 似乎还可以更好 无论你找到最适合你的那个 我认为这是目前的普遍答案 YUI 已经推出了更长的时间 因此毫无疑问将是目前公认的最佳工具 然而 Closure 对我们来说
  • 如何让 gvim 与 Visual Studio 2010 完美配合?

    在我的上一份工作中 他们使用 Visual Studio 2005 有时也使用 Visual Studio 97 为了方便使用命令行 我使用 vim 来编辑 Mercurial 版本控制配置文件 如 hgrc 和 hgignore 然而 我
  • 更改 HTML POST 端口

    我在 HTML 文档中有一个表单 我想将其内容作为 POST 请求提交到服务器 但是 我想将 POST 请求发送到服务器上除端口 80 之外的端口 这可能吗 只需将其附加到操作中即可
  • 5xx 或 4xx 错误,“不存在‘Access-Control-Allow-Origin’标头”

    我的浏览器在 devtools 控制台中记录以下消息 请求的资源上不存在 Access Control Allow Origin 标头 响应的 HTTP 状态代码为 503 背景 我有两个应用程序 一种是连接到 Mongo 数据库的 Exp
  • Android模拟低数据信号强度

    我在使用某个应用程序时遇到了一些问题 我们的用户抱怨在信号强度较低的情况下 他们在使用该应用程序时遇到了问题 有什么办法可以在模拟器上模拟这个吗 Thanks Teja 我知道在 DDMS 的 模拟器控制 选项卡中 顶部有一个部分 您可以在
  • 使用经过训练的分类器进行 NLTK 分类接口

    我找到了一小块代码here http streamhacker com 2010 05 10 text classification sentiment analysis naive bayes classifier import nltk
  • 扩展 jQuery 核心的用处

    我发现了一种扩展核心 jQuery init 函数的方法 每当您使用 或 jQuery 函数时都会调用该函数 使用普通代理模式不可能做到这一点 但以下代码可以使其工作 var origInit jQuery fn init jQuery f
  • DB2级联删除命令?

    是否有特殊的语法来在 DB2 上执行级联删除 或者是否只能通过使用 ON DELETE CASCADE 选项定义它们来创建 可级联 表 我想要实现的是 当我删除该键时 删除基于相同外键的其他表行 但这是在已经存在且填充数据的数据库上完成的
  • 如何迭代到较小的容器(即步幅!= 1)

    有一个问题在精神上很相似here https stackoverflow com questions 2476425 c stl stdtransform with given stride 不幸的是 这个问题没有引起太多回应 我想我会问一
  • Twitter bootstrap 响应式布局中的最小宽度

    有没有办法告诉 bootstrap 当分辨率小于以下值时不要缩小元素 Portrait tablet to landscape and desktop media min width 768px and max width 979px 我想
  • 如何将有理数格式化为小数?

    给定一个任意大 或小 Rational具有有限十进制表示形式的数字 例如 r Rational 1 2 15 gt 1 32768 如何以字符串形式获取其完整的十进制值 上述数字的预期输出是 0 000030517578125 to f显然
  • 如何使用 java JDBC 获取 MySql 的数据库“架构”名称列表

    如何使用 java JDBC 获取 MySql 的数据库 架构 名称列表 The getSchemas DatabaseMetaData 的方法是显而易见的 但对于 MySQL 你必须使用getCatalogs http download
  • 在没有forceRTL的情况下反应原生阿拉伯语(RTL)

    在 RN 我的双语应用程序 英语 阿拉伯语 中 我使用了I18nManager 意见 和I18n 用于翻译 当我将应用程序语言更改为阿拉伯语时 整个应用程序会使用以下代码从启动屏幕再次重新加载 I18nManager forceRTL tr
  • 为什么 get_weights 返回一个空列表?

    我正在自学数据科学 一些奇怪的东西引起了我的注意 在我正在编写的 DNN 示例教程中 我发现 Keraslayer get weights 函数为我的变量返回空列表 我已成功交叉验证并使用model fit 函数来计算召回分数 但当我尝试使
  • 如何使用 javascript 检测 iPhone/Android 从睡眠中唤醒

    我正在构建一个使用 sockets io 的网站 网络应用程序 目前 如果用户在 iphone 上使用 safari 并且锁定屏幕 变黑 我的套接字连接将关闭 这个不错 我想要这个 然而 当他们解锁屏幕 或从睡眠中醒来 时 我想用 java
  • 内联过滤 django admin - 限制选择列表

    鉴于我的内联管理 class TestInlineAdmin admin TabularInline model Test questions through extra 0 and then class QuestionAdmin adm
  • 无法将 UIButton 的自定义类更改为 GIDSignInButton

    我正在尝试将 Google 登录功能添加到自定义按钮 并且我正在关注this https www appcoda com google sign in how to 教程 它告诉我选择按钮 并将其类别设置为GIDSignInButton 然
  • 人们对 DVCS 化石有何看法? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 更新进程内的 GUI 项目

    我正在尝试为我的应用程序制作 GUI 但遇到了问题 使用PySimpleGUI我必须首先定义布局 然后才显示整个窗口 现在的代码是这样的 import PySimpleGUI as sg layout sg Text Input sg In
  • 可空字符串 (string?) 和初始化为可原谅空值的字符串 (字符串 s = null!) 之间有什么区别

    可空字符串 string 和初始化为可原谅空值的字符串 字符串 s null 之间有什么区别 public string nullableString get set null public string forgiveString get