Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net中,“的价值是什么?”;o";为什么?_C#_.net - Fatal编程技术网

C# 在.net中,“的价值是什么?”;o";为什么?

C# 在.net中,“的价值是什么?”;o";为什么?,c#,.net,C#,.net,在.NET中,“o”的价值是什么?为什么 我的想法是,对象的默认类型是值将适合的最低类型,因此答案将适合的最低/最低/最小对象是int32,这就是设置为基类的对象 这似乎正确吗?这就是所谓的整数除法。见: 当你除以两个整数时,结果总是一个整数。对于 例如,7/3的结果是2 此外,C#规格: 整数除法: 除法将结果四舍五入为零,并将 结果是可能的最大整数,该整数小于 两个操作数商的绝对值。结果是零 当两个操作数的符号相同且为零或时为正 两个操作数的符号相反时为负数 因此,向零舍入的结果为3/2提供

在.NET中,“o”的价值是什么?为什么

我的想法是,对象的默认类型是值将适合的最低类型,因此答案将适合的最低/最低/最小对象是int32,这就是设置为基类的对象

这似乎正确吗?

这就是所谓的整数除法。见:

当你除以两个整数时,结果总是一个整数。对于 例如,7/3的结果是2

此外,C#规格:

整数除法:

除法将结果四舍五入为零,并将 结果是可能的最大整数,该整数小于 两个操作数商的绝对值。结果是零 当两个操作数的符号相同且为零或时为正 两个操作数的符号相反时为负数

因此,向零舍入的结果为
3/2
提供
1
。如果要获取浮点数,则应使用浮点除法(即至少一个操作数应为浮点值):

“默认情况下”您将除以两个int32,因为这是常量的计算方式。结果是int32 1


“o”然后变成代表1的“装箱int32”。

编译器看到常量(不变)表达式
3/2
,并执行常量折叠:在编译期间对常量表达式求值,结果用于替换常量表达式。编译器将从更改原始语句

object o = 3/2 ;
致:

由于您将整数
1
struct
向上转换为
object
,因此它会被装箱

需要注意的是,其他类型的常量表达式也会发生同样的情况:

string s = "a" + "b" + "c" ;
已应用相同的恒定折叠变换,并成为:

string s = "abc" ;

运行代码并找出答案。没有必要假设。我只能用一个作为答案,特别感谢尼古拉斯·凯里的正确答案。
object o = 1 ;
string s = "a" + "b" + "c" ;
string s = "abc" ;