首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用?:条件运算符的可空类型问题

使用?:条件运算符的可空类型问题
EN

Stack Overflow用户
提问于 2008-11-17 15:18:36
回答 5查看 59.8K关注 0票数 159

有人能解释一下为什么这在C#.NET 2.0中有效:

代码语言:javascript
复制
    Nullable<DateTime> foo;
    if (true)
        foo = null;
    else
        foo = new DateTime(0);

...but这不是:

代码语言:javascript
复制
    Nullable<DateTime> foo;
    foo = true ? null : new DateTime(0);

后一种形式给出了一个编译错误:“无法确定条件表达式的类型,因为'‘和’System.DateTime‘之间没有隐式转换。”

并不是说我不能使用前者,而是第二种风格与我的其余代码更一致。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-11-17 15:21:27

编译器告诉您它不知道如何将null转换为DateTime

解决方案很简单:

代码语言:javascript
复制
DateTime? foo;
foo = true ? (DateTime?)null : new DateTime(0);

请注意,可以将Nullable<DateTime>编写为DateTime?,这将为您节省大量的输入工作。

票数 335
EN

Stack Overflow用户

发布于 2008-11-17 15:25:49

仅供参考(离题,但很漂亮,与可空类型相关)我们有一个仅用于可空类型的方便的运算符,称为空合并运算符

代码语言:javascript
复制
??

如下所示:

代码语言:javascript
复制
// Left hand is the nullable type, righthand is default if the type is null.
Nullable<DateTime> foo;
DateTime value = foo ?? new DateTime(0);
票数 20
EN

Stack Overflow用户

发布于 2008-11-17 15:22:26

这是因为在三元运算符中,这两个值必须解析为相同的类型。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/295833

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档