如何在 C# 中证明方法永远不会返回 null(按合同设计)

2023-11-24

我有一个永远不会返回空对象的方法。我想澄清一下,这样我的 API 的用户就不必编写如下代码:

if(Getxyz() != null)
{
  // do stuff
}

我该如何表达这个意图?


不幸的是,没有办法内置到 C# 中

您可以记录这一事实,但这不会被自动检查。

如果您使用 resharper,则可以将其设置为在方法标记有 [NotNull] 属性时正确检查这一点。

否则你可以使用微软合同库并将类似于以下内容的内容添加到您的方法中,但对于这样一个简单的注释来说,这是相当多的额外措辞。

Contract.Ensures(Contract.Result<string>() != null)

Spec# 通过允许 ! 解决了这个问题在类型之后将其标记为非空类型,例如

string! foo

但 Spec# 只能用于针对 .NET2,并且已被 Code Contracts 库取代。

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

如何在 C# 中证明方法永远不会返回 null(按合同设计) 的相关文章

  • 通过 CMIS (dotCMIS) 连接到 SP2010:异常未经授权

    我正在使用 dotCMIS 并且想要简单连接到我的 SP2010 服务器 我尝试用 C 来做到这一点 如下所示http chemistry apache org dotnet getting started with dotcmis htm
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查

随机推荐

  • 多记录更新时更新触发器多久触发一次?

    我创建了一个on update扳机 如果我在一条语句中更新表中的 5 条记录 触发器将执行多少次 如果我有多个语句更新单个事务中的记录 它会改变吗 是执行 5 次 还是在所有事务完成后只执行一次 这完全取决于您使用的触发器类型 行级触发器将
  • 通过 MSMQ 解耦 Web 层和数据库层是必要的还是过度的?

    我正在组装一个简单的 asp net Web 控件 作为 ajax 表单发布的结果 将一条记录插入到 MSQL 数据库中 包含此控件的页面可能会在很短的时间内收到数千次点击 我担心打开数据库连接 插入记录然后关闭每个请求的连接的性能问题 我
  • 从系统获取注销事件

    我正在做一个应用程序 用于在用户注销时清除临时文件 历史记录等 那么我如何知道系统是否要注销 在 C 中 有一个房产位于环境告诉关闭过程是否已开始的类 Environment HasShutDownStarted 但经过一番谷歌搜索后 我发
  • 模拟框架如何工作?

    如果我要编写一个模拟库 它将如何工作 换句话说 它们如何工作 我想知道的一件事是 您总是设置期望 因此实际上您需要将期望与该方法在运行时执行的操作进行比较 因此我假设需要反射 在运行时解析类型 另外 当使用术语 模拟对象 时 该对象是被删除
  • 如何将键映射到数据框列的多个值?

    我有一个 df 列 如下所示 col1 Non Profit Other 501c3 501c3 Sole Proprietor 如何创建字典对象或映射层 对所有建议开放 如果它匹配条件并更改键值 我可以在其中传递任何值 例如 如果该值为O
  • asp.net MVC - ValidationSummary 不显示

    我有一个奇怪的问题 即未显示 ValidationSummary 但是 正在显示 ValidationMessage 我检查了输出页面源代码 它们的颜色并没有遮挡它们 我用的是RC 有任何想法吗 编辑 在 ValidationSummary
  • [Pandas]如何获取每组中前n%的记录

    这是我的数据框 df pd DataFrame 1 A 40 2 A 60 3 A 47 4 B 33 5 B 69 6 B 22 7 B 90 8 C 31 9 C 78 10 C 12 11 C 89 12 C 88 13 C 99 c
  • 将当前日期增加 5 天

    date date Y m d current time timestamp 0 我该如何改变 date to date 5 days PHP 版本是 5 2 此代码不起作用 date cur date Y m d current time
  • 为什么 std::apply 使用通用函数会失败?

    取自参考参数 为什么调用std apply add generic 编译失败 有办法解决吗 include
  • 如何正确卸载 C++ Shell 扩展 DLL

    I have shell 扩展 dll用 C 和 COM 编写 dll 被注册并加载到内存中 我的升级设置程序将执行以下操作 注销shell扩展dll 杀死explorer exe 复制更高版本的 shell 扩展 dll 步骤 2 启动e
  • 如何设置默认 Elixir 混合任务

    如果我有一个mix exs文件类似 defmodule Mix Tasks My task do use Mix Task shortdoc Perform my task def run do IO puts Working end en
  • Android:检测导航栏可见性

    如何检测导航栏的存在并将其隐藏 In my onCreate I call hideNavigationBar 方法来隐藏导航栏 然后我注册一个侦听器 以便在用户触摸屏幕上的任何位置时每次导航栏变得可见时隐藏导航栏 如文档 当导航栏在触摸事
  • javascript排序函数排序错误[重复]

    这个问题在这里已经有答案了 你好 我有一个文本框 其值如下
  • 如何在http标头中设置用户代理

    我正在尝试在 C 中的重写函数 GetWebRequest 中的 http 标头中设置用户代理 protected override System Net WebRequest GetWebRequest Uri uri System Ne
  • `git push origin`的结果是什么?

    我在我的本地功能分支 foo 上工作 然后我想将这个新分支推送到原点 以便其他人可以对其进行处理 执行此操作的正常方法是 git push origin foo foo 我最终做到了 它完全按照预期工作 推起了 61 个物体 在此之前 我一
  • 抓取“元素周期表”和所有链接的维基页面

    我想抓取以下维基文章 http en wikipedia org wiki Periodic table 这样我的 R 代码的输出将是一个包含以下列的表格 化学元素简称 化学元素全名 化学元素维基页面的 URL 显然 每个化学元素都有一行
  • Django:“模块”对象没有属性“索引”

    过去几天我一直在尝试学习 Django 但最近我偶然发现了一个我似乎无法解决的问题 在完成 Django 自己的关于编写第一个应用程序的教程后 我决定再次阅读它 直到现在 我才会替换所有内容 以满足我正在构建的原始应用程序的要求 所以 一切
  • spring-boot 应用程序的嵌入式 Tomcat 目录列表

    我有一个带有嵌入式 Tomcat 的 Spring Boot 应用程序 我想通过 tomcat 目录列表从不同位置公开一些图像文件和文件夹 所以我在我的配置文件中添加了以下内容 public class AppConfig extends
  • 在 iOS 设备上运行网络服务器

    我想创建一个可以在其他 iOS 设备之间共享文件的应用程序 也可以在桌面计算机之间共享文件 所以我想做的是在我的设备上运行一个轻量级 Web 服务器 允许从设备下载文件 如下所示 http myphone local 1234 folder
  • 如何在 C# 中证明方法永远不会返回 null(按合同设计)

    我有一个永远不会返回空对象的方法 我想澄清一下 这样我的 API 的用户就不必编写如下代码 if Getxyz null do stuff 我该如何表达这个意图 不幸的是 没有办法内置到 C 中 您可以记录这一事实 但这不会被自动检查 如果