将函数作为函数参数传递

时间:2019-02-19 18:17:51

标签: c# unity3d

Unity C#似乎无法将Func<>符号识别为函数委托。那么,如何将函数作为函数参数传递?

我认为Invoke(functionName, 0)可能会有所帮助。但是我不确定它是否实际上是立即调用该函数,还是等待帧结束。还有另一种方法吗?

1 个答案:

答案 0 :(得分:7)

您可以使用Action来完成

using System;

// ...

public void DoSomething(Action callback)
{
    // do something

    callback.Invoke();
}

并传递类似

的方法调用
private void DoSomethingWhenDone()
{
    // do something
}

// ...

DoSomething(DoSomethingWhenDone);

或使用lambda

DoSomething(() =>
    {
        // do seomthing when done
    }
);

您还可以添加参数,例如

public void DoSomething(Action<int, string> callback)
{
    // dosomething

    callback.Invoke(1, "example");
}

并再次传递类似

的方法
private void OnDone(int intValue, string stringValue)
{
    // do something with intVaue and stringValue
}

// ...    

DoSomething(OnDone);

或lambda

DoSomething((intValue, stringValue) =>
    {
        // do something with intVaue and stringValue
    }
);

或者也可以参见Delegates

,尤其是对于具有动态参数计数和类型的代表,请查看this post