2015-12-31 46 views
0

您好我正在整合facebook SDK,基本上我之前在java中工作過,我是c#腳本的新手,並且出現了一個問題。 我尋覓了很多什麼也沒發現,可能是我的搜索查詢是否足夠好,但我的問題是...可以將一個值存儲在一個函數返回的變量中,這個函數被稱爲參數

這裏稱爲

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

此功能FB.init當初始化函數被稱爲它將調用InitCallBack和OnHideUnity功能,兩者都返回void這些應用的形式Facebook的團結-SDK文檔

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"; 
} 

這可能嗎? 有沒有什麼辦法來獲得這樣的函數調用返回的值? 或者是否有可能以這種方式調用返回值的函數?

+0

是'SomeFunctions '在某處定義或者你定義了它?似乎你想要一個'out'參數 –

+0

你真的將函數作爲參數傳遞給函數嗎? –

+0

正如你所看到的關於OnUnityHide和InitCallBack都是函數作爲參數傳遞和我測試的工作也我所需要的是,如果這樣的函數返回的東西如何可以返回的值將被存儲 –

回答

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" 
+0

@ james-buckmes你的權利,當我檢查facebook-unity-sdk中提供的功能的定義,他們被發現代表 –

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; 
} 
相關問題