c# - 什么相当于在 C# 中通过地址传递

标签 c# c++ c

void Afunction(int* outvar)
{
    if(outvar)
        *outvar = 1337;
}

注意特性:它允许您有选择地通过引用传递变量,以便它可以由函数设置。

我最接近的猜测是 (ref int?outvar)

但这会产生 ref (int?) NOT (ref int)?这就是我需要的

此功能几乎不是 c 或 c++ 中很少使用的功能,所以我认为一定有一些等效的功能? 编辑: 所以让我试试一个很好的例子,我认为 Colision 检查函数是一个主要的例子,你有一个主要的测试是两个物体是否接触,然后是投影 vector 的可选输出,计算投影 vector 需要额外的时间时间,所以你只想在他们想要的时候做,另一方面,它通常使用很多在做碰撞测试时计算的信息。

bool Collide(colObject obj1, colObject obj2, Vector3* projection)
{

    //do a bunch of expensive operations to determine if there is collision
    if(!collided)return false;
    if(projection != NULL)
    {
        //do more expensive operations, that make use of the above operations already done,
        //to determine the proj vect
        *proj = result;
    }
    return true;
}

请注意,我目前只是将 C++ 代码移植到 C#,因此我可能没有任何真正的“开箱即用”解决方案

最佳答案

您在 C# 中可以获得的最好结果是 Action<int> ,像这样:

void MyFunction(Action<int> valueReceiver) {
    if (valueReceiver != null)
        valueReceiver(1337);
}

用法:

MyFunction(null);
MyFunction(v => someVariable = v);

关于c# - 什么相当于在 C# 中通过地址传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3261402/

相关文章:

c++ - Eigen 矩阵分配需要很长时间——有解决办法吗?

c# - 更改冲突的程序集引用

c# - MySqlException : Data too long for column 'Id' at row 1

c++ - 抗锯齿问题

c++ - g++-8 和早期版本之间的奇怪行为

c - 本地主机 UDP 协议(protocol)丢失数据的可能原因?

c - 试图将这些数组写入缓冲区和表数组,我错过了什么?

c - 关于hackerrank问题的运行时错误无缘无故?

c# - 与具有多行的 fk 设置一对多关系

c# - ASP.NET - 欧盟 cookie 立法的现成解决方案?