作为我正在处理的个人项目的一部分,我采用了另一个程序员编写的小代码库,并试图将其重构为我自己的目的。长话短说,他们有一大段代码是传入的命令解析器。我将代码移动到它自己的类文件中,并将几个代码位移动到该类中自己的方法。我遇到的问题是我无法将原始代码块中的两个所需对象传递给新的解析器类。原始代码部分使用名为AllSockets的mutliple方法对象。我似乎无法弄清楚如何将此对象传递给新的类方法而不会收到错误
错误2参数2:无法从“方法组”转换为“对象”
调用代码行:
bool wasValidCommand = (commandParser.CheckForCommands(thisConnection, AllSockets, characterPath, helpFilePath));
调用的方法:
public bool CheckForCommands(ConnectionInfo _connected, object _AllSockets, string characterPath, string helpFilePath)
我在这里发布了托管的Server.cs类:http://codepad.org/1kRHA1nk
我试图将对象传递给的新类位于:http://codepad.org/oONRaEtt
警告:代码现在真正被黑客攻击,变量命名是一场噩梦。如果更容易阅读,我可以粘贴特定部分。任何帮助将不胜感激。
答案 0 :(得分:1)
将object _AllSockets
替换为:
Func<string, object, object, object, object>_AllSockets
你应该在CheckForCommands,Shout和Tell方法签名中替换它。
答案 1 :(得分:1)
AllSocket方法声明为
public object AllSockets(string tempFlag, object objectOne, object object_Two, object object_Three)
通过快速查看代码,看起来AllSockets用于类的私有Shout(..)方法 - 作为方法。因此,为了将其作为函数对象传递,可以使用delegate或Function类型的参数声明CheckForCommands方法:
delegate object AllSocketDelegate (string tempFlag, object objectOne, object object_Two, object object_Three);
public bool CheckForCommands(ConnectionInfo _connected, AllSocketDelegate _AllSockets, string characterPath, string helpFilePath)
或类似于Func而不是委托。
答案 2 :(得分:0)
AllSockets
是一种方法。我猜你想要取AllSockets
方法返回的对象并将其传递给commandParser.CheckForCommands
函数。
尝试类似:
object allSockets = AllSockets(...);
bool wasValidCommand = (commandParser.CheckForCommands(thisConnection, allSockets, characterPath, helpFilePath));