C#/.NET中如何将Nullable可空类型正确转换为非空变量
可空DateTimeOffset传参问题解决方案
直接使用可空值类型(Nullable<T>)内置的.Value属性获取非空值即可,这是最规范、编译器100%能识别类型的写法,不会出现空分析失效或者类型转换错误:
// 对可空值类型推荐用HasValue做判空,和!=null效果完全一致,语义更清晰 if (caseObj.SyncDate.HasValue) { caseDTO.SyncDate = DateTimeHelper.getFormattedDateTime(caseObj.SyncDate.Value); }
之前写法失效的原因
- null-forgiving运算符
!不生效的问题:你贴的测试代码里这一行末尾误写了冒号:而非分号;,本身就存在语法错误。另外要注意:!仅用于给编译器传递空状态标记,不会对可空值类型做实际的取值转换,对DateTimeOffset?这类值类型的可空包装,优先用.Value取值,比靠!绕过编译器分析稳妥得多。 - 显式强转报
无法转换为System.DateTime的问题:这个报错不是强转语句本身导致的,大概率是你的项目中存在另一个接收DateTime类型参数的getFormattedDateTime重载,编译器在你传入DateTimeOffset?且没有明确取出非空值时,重载匹配出现了类型推导偏差,和你要转非空DateTimeOffset的操作无关。
另外提一句你写的格式化方法里的冗余代码:你的方法参数定义的是非空DateTimeOffset值类型,值类型本身不可能为null,方法内部写的if (dateTimeOffset != null)判断永远成立,属于无效代码,可以直接删掉。
内容的提问来源于stack exchange,提问作者lcj
相关产品推荐
相关产品推荐

