积极答复者
请大家讨论一下 C# ??空结合 运算符

问题
答案
-
你好,?? 这个运算符可以解释成为语法糖吗 ? 如果是,那么就交给了编译器来做的,所以,为什么编译器可以编译成NULL,遇到整型的时候却无法编译成0,0.0,0.00等呢?特别想知道C#编译器的看法.
请看一下 ?? 运算符的解释:http://msdn.microsoft.com/zh-cn/library/ms173224(v=vs.120).aspx。?? 称为 null 合并运算符,及空值合并运算符,不是默认值合并运算符。
请问 Int32 有没有空值?0 是 Int32 的空值,还是默认值? Int32 i = default(Int32) 中的 i 等于多少?
我想你应该知道 Int32 是没有空值的,并且 0 是 Int32 的默认值(default(Int32)),因此你的问题就问错了,因为我们定义的是 null 合并运算符,编译器为什么要将默认值合并运算的功能添加进去呢?这不就成为编译器的 BUG 了吗?
因此你的问题实际上该这么问: 为什么运算符 ?? 不实现“默认值合并”运算的功能,也就是说我们可以将其定义为默认值合并运算符?
我们假设添加了默认值合并运算功能,那么请你推断下面语句中 n 等于多少:
int? m = 0,n; // 这里的 n 等于什么?
n = m ?? -1; // 这里的 n 等于什么?
- 已标记为答案 没力敲键盘 2014年9月24日 2:06
全部回复
-
你好,?? 这个运算符可以解释成为语法糖吗 ? 如果是,那么就交给了编译器来做的,所以,为什么编译器可以编译成NULL,遇到整型的时候却无法编译成0,0.0,0.00等呢?特别想知道C#编译器的看法.
请看一下 ?? 运算符的解释:http://msdn.microsoft.com/zh-cn/library/ms173224(v=vs.120).aspx。?? 称为 null 合并运算符,及空值合并运算符,不是默认值合并运算符。
请问 Int32 有没有空值?0 是 Int32 的空值,还是默认值? Int32 i = default(Int32) 中的 i 等于多少?
我想你应该知道 Int32 是没有空值的,并且 0 是 Int32 的默认值(default(Int32)),因此你的问题就问错了,因为我们定义的是 null 合并运算符,编译器为什么要将默认值合并运算的功能添加进去呢?这不就成为编译器的 BUG 了吗?
因此你的问题实际上该这么问: 为什么运算符 ?? 不实现“默认值合并”运算的功能,也就是说我们可以将其定义为默认值合并运算符?
我们假设添加了默认值合并运算功能,那么请你推断下面语句中 n 等于多少:
int? m = 0,n; // 这里的 n 等于什么?
n = m ?? -1; // 这里的 n 等于什么?
- 已标记为答案 没力敲键盘 2014年9月24日 2:06