当我给一个 out
或 ref
参数分配一个值时,该值是否立即被分配给调用方提供的引用,还是在方法返回时将out
和ref
参数值分配给引用?如果方法抛出异常,值会被返回吗?
例如:
int callerOutValue = 1;
int callerRefValue = 1;
MyMethod(123456, out callerOutValue, ref callerRefValue);
bool MyMethod(int inValue, out int outValue, ref int refValue)
{
outValue = 2;
refValue = 2;
throw new ArgumentException();
// Is callerOutValue 1 or 2?
// Is callerRefValue 1 or 2?
}
out
参数的方法。该方法在非常紧密的循环中被调用,我想消除每次调用时所需的初始化,因为参数没有改变,所以我将其改为使用ref
参数,但它的性能明显变差了。有人能解释一下这是为什么吗?还是这只是个偶然事件? - JulianRout
参数的方法结束,而在该方法中,我每次都初始化该变量(由于它是一个out
参数,所以被迫这样做),因此我想我可以通过使用ref
并仅初始化一次变量来优化它,而不是数百万次,因为它没有改变(只是用它来避免复制大struct),但速度却更慢了。 - JulianR