我正在学习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]);
)
}
然后调用函数-somehow-就像:
AskServer("http://myweb", "pseudo", this._pseudo, "jeton", this._jeton);
也许如果你有更好的写作方式,欢迎你,也许像JavaScript一样:
AskServer("http://myweb", {
"pseudo": this._pseudo,
"jeton": this._jeton
});
我的一个问题是我需要传递可能不是字符串的值(键总是这样)。
答案 0 :(得分: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 :(得分:0)
有几种方法可以获得这个结果。
参数数组,元组,匿名类型,......
例如,你可以写public void AskServer(string URL, params object[] values)
{
...
}
并传递任意数量的参数
答案 2 :(得分: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);
)
}