传递方法(使用ref参数)作为参数

时间:2017-04-30 11:26:35

标签: c# methods

在我的特定用例中,我有几个地方可以互换地使用Interlocked.IncrementInterlocked.Decrement,所以我想将逻辑合并到一个方法中,并传递正确的方法来调用,作为论点:

if (Interlocked.Increment(ref x) == something)
{
    DoThis();
}
else
{
    DoThat();
}

我做的另一个地方:

if (Interlocked.Decrement(ref x) == something)
{
    DoThis();
}
else
{
    DoThat();
}

这个想法是巩固成:

void Foo(Action<ref int> interlockedOp)
{
    if (interlockedOp(ref x) == something)
    {
        DoThis();
    }
    else
    {
        DoThat();
    }    
}

但是Action<ref int>部分没有编译。

还有其他方法可以达到这个目的吗?

1 个答案:

答案 0 :(得分:2)

即使编译Action<ref int>,它也行不通。 Increment / Decrement返回一个值。你甚至使用了返回值。 Func<ref int, int>,如果已编译,则会执行此操作,但您仍然无法在该上下文中使用ref

使用自定义委托类型,很容易。

delegate int InterlockedOp(ref int location);