2014-11-22 62 views
1

我已經閱讀this an this,但這並不符合我的需求。如何將一對動態的鍵/值傳遞給函數?

我學習Csharp的,這裏是我的第一個功能之一:

public void AskServer(string URL, WWWForm form) 
{ 
    WWWForm form = new WWWForm(URL); 
    form.AddField("step", StateManager.STEP_GET_CONF); 
    form.AddField("pseudo", this._pseudo); 
    form.AddField("jeton", this._dernierJeton.ToString()); 
    /*... a bit more out of scope code...*/ 
} 

我願做一個(更)通用這樣的東西:

public void AskServer(string URL, ...) 
{ 
    WWWForm form = new WWWForm(URL); 
    /* do a loop on all parameters following the first one */ 
    for (/*dont know how to write this*/) { 
     form.AddField(param[i], param[i+1]); 
    ) 
} 

然後調用函數 - 如何 -

AskServer("http://myweb", "pseudo", this._pseudo, "jeton", this._jeton); 

也許如果你有一個更好的寫作方式,歡迎你,也許有些人如在JavaScript中:

AskServer("http://myweb", { 
    "pseudo": this._pseudo, 
    "jeton": this._jeton 
}); 

我的一個問題是,我需要傳遞的值可能不是字符串(鍵總是)。

回答

2

的params關鍵字將讓您指定傳遞儘可能多的參數可變數量的參數(必須是最後一個參數)。然後,您可以將其視爲一個數組。

public void AskServer(string url, params object[] args) 
{ 
    WWWForm form = new WWWForm(url); 

    for (int i = 0; i < args.GetLength(0); i++) 
     form.Addfield(args[i].ToString(), args[++i]); 
} 

古稱,

AskServer("http://myweb", "pseudo", 1, "jeton", 234); 

或者作爲一種替代方法,使用列表,而不是用在關鍵的強類型(一般聲明是醜陋的,所以你可以在命名空間別名吧)

using Kvp = System.Collections.Generic.KeyValuePair<string, object>; 

.... 

public void AskServer(string url, List<Kvp> kvps) 
{ 
    WWWForm form = new WWWForm(url); 

    foreach (var arg in kvps)    
     form.Addfield(arg.Key, arg.Value);    
} 

古稱:

AskServer("http://myweb", 
      new List<Kvp>() { 
       new Kvp("pseudo", 1), 
       new Kvp("jeton", 234) 
      }); 
+1

非常感謝您的詳細解釋,因爲我沒有說出來,但是這是那種我需要以及件事:詳細的解決方案。 – 2014-11-22 16:51:04

0

有幾種方法可以獲得這個結果。

參數數組,元組,匿名類型,...

例如,你可以寫

public void AskServer(string URL, params object[] values) 
{ 
... 
} 

並根據需要

0

我想試試這個...

public void AskServer(string url, KeyValuePair<string, object>[] parameters) 
{ 
    WWWForm form = new WWWForm(URL); 
    /* do a loop on all parameters following the first one */ 
    for (/*dont know how to write this*/) { 
     form.AddField(parameters[i].Key, parameters[i].Value); 
    ) 
} 
相關問題