Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如果未填入预期类型的声明变量,则方法调用返回的值将转到何处?_C#_.net_Return Value - Fatal编程技术网

C# 如果未填入预期类型的声明变量,则方法调用返回的值将转到何处?

C# 如果未填入预期类型的声明变量,则方法调用返回的值将转到何处?,c#,.net,return-value,C#,.net,Return Value,我们不必将方法调用返回的值填入预期类型的声明变量,但在这种情况下会发生什么 以下返回值去了哪里/它发生了什么: decimal d = 5.5m; Math.Round(d, MidpointRounding.AwayFromZero); 显然,如果我想查看方法调用的结果,我将执行以下操作: decimal d = 5.5m; decimal d2 = Math.Round(d, MidpointRounding.AwayFromZero); // Returns 6 into

我们不必将方法调用返回的值填入预期类型的声明变量,但在这种情况下会发生什么

以下返回值去了哪里/它发生了什么:

decimal d = 5.5m;
Math.Round(d, MidpointRounding.AwayFromZero);

显然,如果我想查看方法调用的结果,我将执行以下操作:

decimal d = 5.5m;
decimal d2 = Math.Round(d, MidpointRounding.AwayFromZero); // Returns 6 into 
                                                           // the variable "d2"
(此问题不特定于值类型,但也适用于引用类型)

从以下位置弹出:


如果它是引用类型,则引用将从堆栈中弹出,并且对象本身最终将由GC收集(假设它没有其他引用)。

推送到调用方堆栈上的方法的返回值。是否使用它取决于调用方的代码

编辑

例如:

void Main()
{
   var result = MyCoolFunc(10, 20); {1}
}

int MyCoolFunc(int prm1, int prm2) 
{
   return (prm1 + prm2);
}
一些虚拟机的Pesudo示例,跳过初始代码

如果我们不在第{1}
var result
行上写入,那么它将在这里结束,如果是的话 应该有这样的东西

VM_ALLOC result //allocate space for result
VM_GETFROMSTACK // get content of the stack to result

虚拟机代码是一种伪代码,在现实生活中并不存在。它过去只是举个例子

也许你需要问问爱丽丝+1对于有趣的问题,请进入丢失、遗忘和未引用返回值的黑暗空间。@George LOL!你刚刚成就了我的一天:-)但是IL堆栈是什么?如果能多读一些就好了,但我似乎找不到任何关于it@Shai:执行堆栈可能是更好的术语。在x86平台上,返回值通常会出现在CPU寄存器中(EAX或ST(0)[用于双精度/浮点]是其他编译器中的经典选择;不确定CLR抖动是否使用相同的约定);如果它不存储在任何地方,它最终会被寄存器的其他用途覆盖。那么值类型呢?他们也被抓到了吗?@亚历克斯:是的
double
是一种值类型。
VM_PUSH 10 //prm1 stack state is {10}
VM_PUSH 20 //prm1  stack state is {10,20}
VM_EXEC MyCoolFunc //call function which executes what need, removes from stack those 2 values and pushes result of the function execution. stack state is {30}
VM_ALLOC result //allocate space for result
VM_GETFROMSTACK // get content of the stack to result