可以将值存储在由称为参数的函数返回的变量中

时间:2015-12-31 10:20:00

标签: c# unity3d

您好我正在将facebook SDK整合到一起,基本上我之前在java工作过,我是c#script的新手,我想到了一个问题。 我搜索了很多没有发现任何东西,可能是我的搜索查询是否足够好但我的问题是......

作为函数FB.init在这里调用

void Awake ()
{
   FB.Init(InitCallback, OnHideUnity);  
}

这里当init函数被调用时,它将调用InitCallBack和OnHideUnity函数,两者都返回void这些用于表单facebook-unity-sdk docs

private void InitCallback ()
{
    if (FB.IsInitialized) {
        // Signal an app activation App Event
        FB.ActivateApp();
        // Continue with Facebook SDK
        // ...
    } else {
        Debug.Log("Failed to Initialize the Facebook SDK");
     }
}

private void OnHideUnity (bool isGameShown)
{
    if (!isGameShown) {
        // Pause the game - we will need to hide
        Time.timeScale = 0;
    } else {
        // Resume the game - we're getting focus again
        Time.timeScale = 1;
    }
}

我的问题是,如果我调用这样的函数并且该函数返回一些例如字符串并且我想要存储它像这样的东西

String result="";
SomeFunctions(FunctionOne,result=FunctionTwo);

 String FunctionTwo()
 {
  return "a String";
 }

这可能吗? 有没有办法获得这样的函数调用返回的值? 或者这可能以这种方式调用返回值的函数吗?

2 个答案:

答案 0 :(得分:1)

您似乎在混淆函数表达式的委托。在作为函数调用它之前,委托将没有返回值。

void SomeFunction(Func<string> func) {
    var result = func(); // only here will the function return value be accessible
    Console.WriteLine(result);
}
SomeFunction(() => "test");

虽然您无权访问函数的返回值,但是委托可以在其方法体内指定您选择的变量,而不是使用它的返回值:

string result;
SomeFunction(() => {
    result = "test";
    return result;
});
// result would now contain "test"

答案 1 :(得分:0)

我不确定您要在此处实现什么,但您可以使用out来更改参数的引用。

string result="";

MyMethod(out result);

Debug.Log(string.Format("Result: {0}", result));

void MyMethod(out string pValue)
{
    pValue = "my changed value";
}
  

out关键字导致参数通过引用传递。这与ref关键字类似,不同之处在于ref要求在传递变量之前对其进行初始化。要使用out参数,方法定义和调用方法都必须明确使用out关键字。

https://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx

但是在这样的情况下,你可以返回正确的值。在下面的例子中,它甚至不值得传递参数,因为我们没有使用它。

string result = MyMethod(result);

string MyMethod(string pValue)
{
    pValue = "My changed value";
    return pValue;
}