如何测试C#ref参数是否引用相同的项目

Pau*_*xon 10 c#

在C#中给出具有以下签名的函数

public static void Foo(ref int x, ref int y)
Run Code Online (Sandbox Code Playgroud)

如果使用该函数调用

int A = 10;
Foo(ref A, ref A)
Run Code Online (Sandbox Code Playgroud)

函数Foo内部是否可以测试x和y参数引用相同的变量?对x和y的简单等效测试是不够的,因为在两个不同变量具有相同值的情况下也是如此.

drf*_*drf 5

如果您愿意使用不安全的代码,则可以比较基础变量地址:

public static bool Foo(ref int a, ref int b)
{
    unsafe
    {
        fixed (int* pa = &a, pb = &b)
        {
            // return true iff a and b are references to the same variable
            return pa == pb; 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

(unsafe根据@Michael Graczyk的评论,编辑从方法签名中删除.)

  • IMO这是正确的方法,除非你*绝对*不能用`/ unsafe`编译.drf`Foo`也不需要是不安全的,因为它的返回值和任何形式都不是不安全的类型. (2认同)