首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译器是如何理解Nullables的?

编译器是如何理解Nullables的?
EN

Stack Overflow用户
提问于 2015-02-09 01:09:27
回答 1查看 113关注 0票数 5

如果我有办法:

代码语言:javascript
复制
protected int CalculateActualDuration(DateTime? startDate, DateTime? endDate) {
        if (startDate.HasValue && endDate.HasValue) { 
            return Math.Abs((int)(endDate.Value.Subtract(startDate.Value).TotalMinutes));
        }
        else {
            return 0;
        }
    }

我可以通过传入两个DateTime来调用该方法?和一个DateTime。那么编译器是如何理解这种区别的呢?

这是否意味着如果我传入一个DateTime值,if语句本质上将类似于

代码语言:javascript
复制
if (true && true)

所有的*.value都被更改为适当的对象了?所以所有的endDate.Value现在都是EndDates了?

编译器是否在运行时将所有非Nullables的参数转换为Nullables?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-09 01:21:25

方法中的所有内容都保持不变,startDateendDate参数仍然是结构的实例。

当您将“普通”DateTime传递给该方法时,您正在利用Nullable<T>结构中指定的隐式转换

代码语言:javascript
复制
public static implicit operator Nullable<T>(T value) {
    return new Nullable<T>(value);
}

从上面链接的MSDN页面:

如果值参数不是null,则将新可空值的价值属性初始化为值参数,HasValue属性初始化为

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

https://stackoverflow.com/questions/28401384

复制
相关文章

相似问题

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