简而言之,我想将Unity3d(单声道)的JSONRPC2 api实现到NodeJS服务器。
我对C#很陌生,我觉得我很想做的事情。
目前我可以这样做:
JSONRequest request = new JSONRequest();
JSONNode jsonParams = new JSONNode();
....
request.params = jsonParams;
socket.Send(request.toJSON());
正如您所看到的,调用RPC非常冗长,输入所有这些都需要一些时间。
我想拥有的是这样的:
req = rpc.call('add', 1, 2);
req.success += SuccessCallback
req.error += ErrorCallback
由于C#不允许动态签名,我必须为每种可能的类型定义签名,例如
请求调用(字符串方法,int a,int b) 请求调用(字符串方法,字符串a,int b) ...
所以今天我提出了这个想法,它会使写入更简单,非常接近我想要的,而不是传递参数,我传递一个构建参数的回调方法。然后结果将被序列化。
rpc.call("add", () => [1, 2])
但是我觉得它没有多大帮助,因为代表仍然必须有一个特定的返回类型,这让我无处可去。
我该怎么做?
答案 0 :(得分:1)
听起来你正在寻找的是C# params keyword,它可以为你提供任意数量的函数参数。由于参数的类型也各不相同,因此也可以使用private void btnAdd_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Name list|*.txt";
try
{
if (ofd.ShowDialog() == DialogResult.OK)
{
string[] nameList = File.ReadAllLines(ofd.FileName);
foreach (string line in nameList)
{
ListViewItem lvi = new ListViewItem();
string lastName = line.Split(':')[1]; //This is what I dont understand
lvi.SubItems.Add(lastName);
lvNames.Items.Add(lvi);
string firstname = "";
IP = line.Replace(lastName, "").Replace(":", "");
lvi.Text = firstname;
}
}
}
catch (Exception ex)
{
}
}
作为全部捕获。所以,像这样:
object
为您提供原始用途:
public void call (string method, params object[] args) { // Any number of any type
// Create the request:
JSONRequest request = new JSONRequest();
JSONNode jsonParams = new JSONNode();
// For each arg:
foreach (object argument in args) {
// (guessing JSONNode here - I don't know if it has 'Add')
jsonParams.Add(argument);
}
request.params = jsonParams;
}