这个问题更多是出于好奇而不是出于实际需要。
有什么方法可以测试传入ByRef
(即ref
或out
在 C# 中)参数的参数是否与某个“其他”变量具有相同的存储位置?我并不是要测试对象是否相同,因为两个不同的引用变量可能是对同一对象的两个不同的引用。
我想出了一些例子来解释我的意思。考虑:
public static void SillySwap(ref int a, ref int b)
{
// first put sum of original numbers into slot a,
// then use that to get out the original numbers swapped
a = a + b;
b = a - b;
a = a - b;
}
(我们通常会使用第三个临时变量,但为了说明我的问题,我会这样做。)SillySwap
如果你有两个变量,数值相同或不同,效果很好。但如果你这样称呼它:
int shared = 42;
SillySwap(ref shared, ref shared);
它会歼灭shared
。有什么方法可以在SillySwap
ifa
和b
are equal 作为存储位置的主体内进行测试?
这是一个带有字段(“类变量”)的修改示例:
protected static int field;
public static void SillySwap2(ref int arg)
{
arg = arg + field;
field = arg - field;
arg = arg - field;
}
在这里,我们要检查arg
传入的是否实际上是变量field
。
最后一个例子,考虑这个:
static bool SillyTryGetStrings(out string first, out string second)
{
// the order of assignment may matter here!
second = "world";
first = "Hello";
return true;
}
假设某个陌生人为first
和传入了相同的变量second
。我们可以在方法内部检查吗?