为什么 C# 和 Java 中出现“null”?

2024-06-30

我们注意到,用 C#(或 Java)开发的软件中的许多错误都会导致 NullReferenceException。

语言中包含“null”有什么原因吗?

毕竟,如果没有“null”,我就不会有 bug,对吧?

换句话说,语言中的哪些功能如果没有 null 就无法工作?


Anders Hejlsberg,“C# 之父”,刚刚在他的《计算机世界》采访 https://www2.computerworld.com.au/article/261958/a-z_programming_languages_c_/?pp=3:

例如,在类型系统中,我们没有区分值类型和引用类型以及类型的可为空性。这可能听起来有点奇怪或有点技术性,但在 C# 中,引用类型可以为 null,例如字符串,但值类型不能为 null。拥有不可为空的引用类型肯定会很好,因此您可以声明“这个字符串永远不能为空,并且我希望编译器检查我在这里永远不会遇到空指针”。

如今,人们在我们的平台中使用 C# 进行编码时遇到的错误(对于 Java 也是如此)可能是空引用异常。如果我们有一个更强大的类型系统,允许您说“这个参数可能永远不会为空,并且您的编译器请通过对代码进行静态分析来在每次调用时检查这一点”。然后我们就可以消除各类错误。

Cyrus Najmabadi,C# 团队的前软件设计工程师(现在在 Google 工作)在他的博客上讨论了这个主题:(1st http://blogs.msdn.com/cyrusn/archive/2005/04/25/411617.aspx, 2nd http://blogs.msdn.com/cyrusn/archive/2005/04/25/411630.aspx, 3rd http://blogs.msdn.com/cyrusn/archive/2005/04/26/412040.aspx, 4th http://blogs.msdn.com/cyrusn/archive/2005/04/27/412444.aspx)。 看来采用不可空类型的最大障碍是符号会扰乱程序员的习惯和代码库。 C# 程序中大约 70% 的引用最终可能会成为不可为 null 的引用。

如果你真的想在 C# 中拥有不可为空的引用类型,你应该尝试使用Spec# http://research.microsoft.com/specsharp/这是一个 C# 扩展,允许使用“!”作为不可为空的符号。

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

为什么 C# 和 Java 中出现“null”? 的相关文章

  • JPA 多对多关系创建两个联接表

    我正在尝试在之间创建多对多关系User and FileObject假设用户可以访问许多文件对象的类 并且文件对象可以由许多用户和一对多关系访问 因为一个用户可以拥有许多文件 但一个文件只能由一个用户拥有 这是我的代码 Entity pub
  • 类内枚举前向声明是否可能? [复制]

    这个问题在这里已经有答案了 我知道在 C 11 中可以转发声明枚举类型 如果提供了存储类型 例如 enum E short void foo E e enum E short VALUE 1 VALUE 2 但我想转发声明一个类中定义的枚举
  • 如何管理 JSONP 响应中的 ' ?

    我需要像这样管理 char 在我的 JSONP 请求中 通过 jquery 使用 Ajax 所以 来自 C 这就是我所做的 myText Hello I m a string myText Replace Response Write Re
  • 您可以链接两个 JFormattedTextField 的值吗?

    我有一个带有 2 个 JFormattedTextFields 的界面 我需要它们的值 不仅仅是显示的文本 相同 理想情况下 它们都应该是可编辑的 其中一个的更改会反映在另一个中 我一开始只是在两者之间共享一个文档 但很快就遇到了一个问题
  • 如何从 appsettings.json 获取日期时间?

    我有 net core 5 0 应用程序并尝试从 appsettings json 获取 DateTime 应用程序设置 json TimeModel RestartDuration 27 10 2021 12 30 00 Code ser
  • 错误:LNK1120:5 个未解析的外部

    我试图在我的帖子中获取有关已安装应用程序的详细信息 而且 我收到以下错误 Code include
  • 在内存对象缓存中开发

    我正在开发一个基于网络的医疗应用程序 需要创建一个小型内存对象缓存 这是我的用例 我们需要显示需要某些东西 血液 肾脏等 的人提交的请求列表 并且它不会是一个巨大的列表 因为在某一天对血液或其他任何东西的请求将是有限的 请注意 我们不想使用
  • 浮点指令异常——FLDZ故障?

    I am trying to debug the problem I posted earlier here C and pin tool very weird DOUBLE variable issue with IF statement
  • C++14 中专门用于数组类型的分配器?

    为什么 c 14 中没有 std allocator 的数组模板专门化 当我自己尝试专门化 std allocator 时 我在实现 Construction 和 destroy 方法时遇到了死胡同 是这个原因吗 那么为什么 std all
  • 从 Runnable 类内部访问共享变量

    我需要在主类的 main 方法中定义一个共享变量 我需要两个线程才能访问该共享变量 我通过实现 Runnable 接口并实现该接口的抽象 run 方法来创建线程 如何从实现 Runnable 接口的类中定义的 run 方法中引用 Main
  • 启动离线 ClickOnce 应用程序并等待退出

    我已经部署了 ClickOnce Windows 窗体应用程序 应用程序 A 另一个应用程序 应用程序 B 以文件名作为参数启动应用程序 A 我用这段代码做到这一点 var basePath Environment GetFolderPat
  • 如何使用 Firebase 查询中的信息填充 Android ListView

    这是我的第一篇文章 所以如果我没有遵循我应该遵循的一些协议 我深表歉意 我正在尝试使用 Firebase 数据库中的一些信息填充 ListView 我认为我遇到的问题是对数据库的查询太慢 线程可能正在下载图片 并且我的活动加载其活动布局而不
  • 在运行的 Windows 控制台应用程序中处理拖放文件

    首先澄清一下 我是not询问如何将文件拖放到 exe 图标上 我想知道如何处理拖放到已经运行win32 控制台应用程序 我也是not询问如何通过 Windows 消息泵处理基于 WinMain 的应用程序内部的拖放 我想在带有入口点的程序内
  • 在哪里可以查看 LINQ 源代码?

    我需要编写自己版本的 except 方法 或者至少以某种方式修改 LINQ 方法的工作方式 我正在与大型自定义对象列表进行比较 并且需要将匹配项从列表 A 连接到列表 B 我认为除外哈希表构建是进行比较的最快方法 但该方法只会返回非匹配项
  • 如何在类型依赖于派生类的基模板类中声明成员?

    给定一个使用 CRTP 的基类 我正在考虑在基模板类中声明一个成员 其中类型依赖于派生类 虽然以下内容按预期工作 template
  • 在文本文件中搜索字符串的更快方法[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要使用 C 在一组文本文件中搜索一个大约 13 个字符的字符串 文本文件的数量正在变化 范围在 100 1000 之间 文件大小范
  • EasyMock - 由于无法访问父类私有对象(i18n)而引发 NullPointerException

    A Class Parent4 private I18nUtils i18n Here Nullpointerexception occur public Parent4 SetText i18n getText HELLO B Class
  • 将 HTML 渲染为图像

    我正在基于动态输入和裁剪图像生成优惠券 并且现在使用 ntml 和 css 显示优惠券 问题是 打印这已成为一个问题 因为打印时背景如何消失以及其他问题 所以我认为最好的解决方案是能够基于html生成图像 或者设置某种接受字符串和图像的模板
  • 使用本机 Win32 读取“C”中的文本文件(Unicode)

    我有一个使用 CreateFile 和 WriteFile 创建的面向行的文本文件 Unicode 使用 ReadFile 以二进制流形式读取该文件非常简单 但需要额外的低级处理才能将其分成几行 是否有 Win32 函数可以为我执行此操作
  • “auto_ptr”和 STL 容器:编写错误用法的示例

    读完本教程后提出这个问题 http www cprogramming com tutorial auto ptr html http www cprogramming com tutorial auto ptr html 在那里你可以找到以

随机推荐

  • 在反应中导入多个文件

    我正在为我的 React 项目使用 create react app 它已经配置了 webpack 来导入图像 我希望将多个图像 例如 10 个 从图像文件夹导入到组件中 最简单的方法是添加多个导入语句 例如 import Img0 fro
  • 如何将 MVC 操作参数重新映射到另一个参数名称?

    我必须实现一个像这样调用的 MVC 操作 http address Controller MyAction resName name 它由第三方调用 并通过硬编码传递resName 所以天真的方法是采取这样的行动 ActionResult
  • Scala/Lift 的 OAuth 2.0 提供程序实现

    有谁知道 Scala Lift 的 OAuth 2 0 提供程序 服务器端 实现吗 我看到 Scala 2 0 客户端 但没有提供程序 看起来并不存在现成可用的 所以我认为你有两个选择 自己实施一个 Use a Java库 http cod
  • 在 RStudio 中自动格式化 R 代码

    RStudio 中是否有自动格式化代码的可能性 I found this https stackoverflow com questions 3017877 tool to auto format r code 但未与RStudio连接 还
  • 恢复 woocommerce 订单

    最近 我的服务器团队更换了我的数据库 他们将我们以前的数据库放入其中 因此 我们丢失了某一天 特定日期 的订单详细信息 现在 服务器团队提供包含丢失当天订单详细信息的备份 现在请告诉我如何恢复这些订单 我无法用给定的备份替换我们的数据库 因
  • 如何在PHP5.5上安装V8js?

    我想在 Ubuntu 12 04 上安装 PHP5 5 的 v8js 扩展 但无法使其工作 当我尝试使用 PECL 安装 v8js 扩展版本 0 2 0 最新 时 我收到以下消息 配置 错误 libv8 必须是版本 3 24 6 或更高版本
  • 即使使用 kapt,房间“也找不到”的实现

    我正在尝试在我的项目中使用 Room Gradle 同步文件很好 但在尝试获取数据库实例时出现 RunitomeException 原因 java lang RuntimeException 找不到 com fillooow android
  • rc1 路由器“没有路由器提供商”

    这是 Shuhei 帮助我解决 config js 问题后出现的错误的后续帖子Angular 2 RC路由器Angular2 polyfills js 349错误 https stackoverflow com questions 3708
  • 依赖性问题在大型应用程序中实现用于语义日志记录的 EventSource

    我正在开发一个由三个 Windows 服务和几个普通 Windows 应用程序 exe 组成的大型产品 现在我们要转向 ETW 和语义日志记录 并使用 Microsoft Diagnostics Tracing EventSource 我在
  • 古罗比报告了无界模型,尽管数学上是不可能的

    我正在使用 Julia 出色的 JuMP 包来求解线性程序 并使用 Gurobi 6 0 4 作为求解器 目标函数是决策变量的总和 明确定义为非负 并且问题要求将其最小化 出于某种原因 古罗比认为该模型是无限的 这是变量和目标的定义 def
  • 解决所有 Java 字节都已签名这一事实的最佳方法是什么?

    在Java中 不存在无符号字节这样的东西 使用一些低级代码时 有时您需要使用无符号值大于 128 的字节 这会导致 Java 将它们解释为负数 因为 MSB 用于符号 解决这个问题的好方法是什么 说不使用 Java 是不行的 如果你这样做的
  • 非英语语言(CJK 等)中的 n 元语法名称分析

    我正在致力于对人员数据库进行重复数据删除 对于第一遍 我遵循基本的两步过程 以避免对整个数据库进行 O n 2 操作 如所述在文献中 http nike psu edu publications jcdl05 pdf 首先 我 阻止 迭代整
  • MS Chart for .NET 预定义调色板颜色列表?

    Microsoft Chart for NET 3 5 4 x 具有预定义的调色板 例如浆果色 明亮色 海绿色等 是否有每个调色板的颜色列表 十六进制或命名 Thanks 发现这张图片亚历克斯 戈列夫的博客 http blogs msdn
  • 使用可执行文件的完整路径并以管理员身份运行时,Windows 10 无法访问指定的设备、路径或文件

    Note 我已将目录替换为a和 exe 与b exe我重复了我所做的每一个测试 以确保它不是打字语法 我有一段非常简单的代码 它可以在 Windows XP 到 Windows 7 上完美运行 var processPath c a b e
  • 是否可以“重新设计”IOS 日期选择器?

    我需要一个自定义日期选择器 本质上只是想删除 IOS 版本中的图形 但保留 3 列日期滚动 是否需要从头开始重新构建 所有研究都表明是 或者是否可以仅禁用或交换图像 我自己还没有尝试过 但也许您可以在日期选择器上方添加一个 UIImageV
  • Scrapy ITEM_PIPELINES 警告

    我的settings py中有以下内容 ITEM PIPELINES mybot pipelines custompipeline 但是当我启动 scrapy 时 我收到以下警告 lib python2 7 site packages sc
  • 需要 Google App Engine 国际化帮助 (Python)

    有没有人对如何在应用程序引擎 webapp python 中使用国际化有任何建议 我看过一些关于 django 翻译支持的帖子 但我似乎找不到足够的信息来了解如何使其工作 我需要的是一个解决方案 浏览器可以检测语言 用户可以覆盖和设置 模板
  • 如何在 Hive 中使用 NOT IN

    假设我有 2 个表 如下所示 现在 如果我想获得 sql 将给出的结果 insert into B where id not in select id from A 这将插入3 George在表B中 如何在蜂巢中实现这一点 Table A
  • Cassandra 3.x 触发器列值

    我使用的是 3 4 Cassandra 触发器 API 它引入了修改后的 ITrigger 接口 例如 https github com apache cassandra blob trunk examples triggers src o
  • 为什么 C# 和 Java 中出现“null”?

    我们注意到 用 C 或 Java 开发的软件中的许多错误都会导致 NullReferenceException 语言中包含 null 有什么原因吗 毕竟 如果没有 null 我就不会有 bug 对吧 换句话说 语言中的哪些功能如果没有 nu