我是*的新手,多年来一直是潜伏者,对我作为开发人员的帮助很大.非常感谢.
在第一篇文章和问题结束我的介绍:
场景:
我正在使用SignalR.
我有一个SignalR服务器,它向所有具有6个参数的客户端广播消息.
当我在Web客户端(MVC)中实现它时它工作正常,我可以获得所有这6个参数.
我尝试在Xamarin中实现它.
以下是示例代理段:
proxy.On<string, string, string , string, string, string>("test", (test1, test2, test3, test4, test5, test6) =>
{
MyActivity.RunOnUiThread(() =>
{
//my method here
});
});
当我有6个参数时,我会收到此错误:
‘IHubProxy’不包含’On’的定义,并且没有扩展方法’On’可以找到接受类型’IHubProxy’的第一个参数(你是否缺少using指令或汇编引用?)
但是当我将参数更改为4时
proxy.On<string, string, string , string>("test", (test1, test2, test3, test4) =>
{
MyActivity.RunOnUiThread(() =>
{
//my method here
});
});
我不会得到错误,我将能够获得这4个参数.但在我的应用程序中,我需要获得所有这6个参数.
为什么每当我有超过4个参数时我都会收到此错误?
我错过了什么吗?
谢谢!
最佳答案:
这只是SignalR .NET客户端代理的限制.它接触开发者有点懒于重写On方法以支持更多Type参数,或者他们只是认为如果你有更多参数,你应该将它们分组在一个类中.
解决方案非常简单,创建一个包含所需数量的类而不是使用参数.就像是:
public class AllParams
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public string Prop3 { get; set; }
public string Prop4 { get; set; }
public string Prop5 { get; set; }
public string PropN { get; set; }
}
proxy.On<AllParams>("test", all =>
{
MyActivity.RunOnUiThread(() =>
{
// all.Prop1, all.Prop2, etc...
});
});
这甚至可以提高您的代码可读性