如何将一对动态键/值传递给函数
本文关键字:值传 函数 动态 | 更新日期: 2023-09-27 18:31:27
我已经读过这个了,但这并不能满足我的需求。
我正在学习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
});
我的一个问题是我需要传递可能不是字符串的值(键将永远是)。
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)
});
有
几种方法可以获得此结果。
参数数组, 元组, 匿名类型, ...
例如,你可以写
public void AskServer(string URL, params object[] values)
{
...
}
并根据需要传递任意数量的参数
我会试试这个...
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);
)
}