当前位置: 首页 > 知识库问答 >
问题:

断言变量不为空

通博实
2023-03-14

我有一个类型为datetime?变量

在一个函数中,我检查它是否为null,并希望以后使用它,而不必每次调用都必须?.。例如,在Kotlin中,IDE识别这样的检查,并在之后断言变量不能为null。在C#中有这样的方法吗?

DateTime? BFreigabe = getDateTime();
if (BFreigabe == null) return false;
TimeSpan span = BFreigabe - DateTime.Now; 
//Shows Error because it.BFreigabe has the type DateTime?, even though it can't be null

编辑:

TimeSpan span = BFreigabe.Value - DateTime.Now;
TimeSpan span = (DateTime)BFreigabe - DateTime.Now;

共有1个答案

林鸿彩
2023-03-14

如果您有前面的检查,您可以访问该值。可空类型总是有两个属性:HasValueValue

您可以强制转换为datetime(不使用)或使用value属性。

DateTime? BFreigabe = getDateTime();
if (!BFreigabe.HasValue == null) 
    return false;

TimeSpan span = BFreigabe.Value - DateTime.Now;

或者将可空变量存储在不可空变量中:

DateTime? BFreigabe = getDateTime();
if (BFreigabe.HasValue == null) 
{
    DateTime neverNull = BFreigabe.Value;
    TimeSpan span = neverNull  - DateTime.Now;
}
function TimeSpan Calc(DateTime time)
{
    // here we know for sure, that time is never null
}
 类似资料:
  • 问题内容: 如何检查变量是否是实例方法?我正在使用python 2.5。 像这样: 问题答案: 是您想确定是否确实有一种方法,而不仅仅是可以调用的方法。 如果参数是方法,函数(包括s),具有的实例或类,则为true 。 方法与函数(如和)的属性不同。所以你要

  • 在我们的网站上有一个图标,隐藏/取消隐藏菜单。我创建了以下脚本来测试它: 语句“expect(foo.isDisplayed()).toBe(false);”是从本网站复制的。我看不出它失败的任何原因,但是当我运行测试时,我得到了以下错误,即:foo。显示的是(…)。托比不是一个函数。如何使用expect函数验证菜单是否隐藏? estBed测试汉堡菜单单击验证消息:失败:foo.is显示(...)

  • 主要内容:变量赋值,变量的数据类型,查找变量,删除变量变量提供了程序可以操作的命名存储。R语言中的变量可以存储原子向量,原子向量组或许多R对象的组合。有效的变量名称应该是由字母,数字和点或下划线字符组成。 变量名称以字母开头,或者点后面不带数字。如下一些示例 - 变量名 合法性 原因 有效 由字母,数字,点和下划线组成 无效 含有字符因此无效。只允许点()和下划线()组成。 无效 以数字开头,因此无效。 , 有效 可以以点()开头,但点()后面不应是

  • 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。 Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。 声明变量的一般形式是使用 var 关键字: var identifier type 变量声明 第一种,指定变量类型,声明后若不赋值,使用默认值。 var v_name v_type v_name = value 第二种,根据值自行判定变量

  • Go 语言中变量的概念和 C 语言中也一样,所以我们直接来看下如何定义和使用变量即可,C 语言中定义变量的格式: 数据类型 变量名称; 数据类型 变量名称1, 变量名称2; #include <stdio.h> int main(int argc, const char * argv[]) { int num1; // 先定义 num1 = 10; // 后初始化

  • 问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,