Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将多方法对象传递给另一个类_C#_Object_Methods_Refactoring_Wrapper - Fatal编程技术网

C# 将多方法对象传递给另一个类

C# 将多方法对象传递给另一个类,c#,object,methods,refactoring,wrapper,C#,Object,Methods,Refactoring,Wrapper,作为我个人项目的一部分,我使用了另一个程序员编写的一个小代码库,并试图根据自己的目的对其进行重构。长话短说,他们有一大块代码,这是一个传入的命令解析器。我将代码移动到它自己的类文件中,并将几个代码位移动到该类中它们自己的方法中。我遇到的问题是,我无法将两个需要的对象从原始代码块传递到新的解析器类。原始代码部分使用名为AllSockets的mutliple方法对象。我似乎不知道如何将这个对象传递给新的类方法而不出现错误 错误2参数2:无法从“方法组”转换为“对象” 调用代码行: bool wasV

作为我个人项目的一部分,我使用了另一个程序员编写的一个小代码库,并试图根据自己的目的对其进行重构。长话短说,他们有一大块代码,这是一个传入的命令解析器。我将代码移动到它自己的类文件中,并将几个代码位移动到该类中它们自己的方法中。我遇到的问题是,我无法将两个需要的对象从原始代码块传递到新的解析器类。原始代码部分使用名为AllSockets的mutliple方法对象。我似乎不知道如何将这个对象传递给新的类方法而不出现错误

错误2参数2:无法从“方法组”转换为“对象”

调用代码行:

bool wasValidCommand = (commandParser.CheckForCommands(thisConnection, AllSockets, characterPath, helpFilePath));
调用的方法:

public bool CheckForCommands(ConnectionInfo _connected, object _AllSockets, string characterPath, string helpFilePath)
我已经在这里发布了hosting Server.cs类:

我试图将对象传递到的新类位于此处:


警告:代码现在真的被黑在一起了,变量命名是一场噩梦。我可以粘贴的具体部分,如果这将更容易阅读。如有任何帮助,将不胜感激。

对象\u所有套接字
替换为:

Func<string, object, object, object, object>_AllSockets
Func\u所有套接字

您可能应该在CheckForCommands、Shout和Tell方法签名中替换它。

AllSockets
是一种方法。我猜您希望获取
AllSockets
方法返回的对象,并将其传递到
commandParser.CheckForCommands
函数中

尝试以下方法:

object allSockets = AllSockets(...);
bool wasValidCommand = (commandParser.CheckForCommands(thisConnection, allSockets, characterPath, helpFilePath));

AllSocket方法声明为

public object AllSockets(string tempFlag, object objectOne, object object_Two, object object_Three)
快速查看代码,似乎所有套接字都在类as方法的私有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而不是委托

这是行不通的,因为AllSockets参数稍后会像函数一样出现在方法中。非常有趣。我以前不知道Func,现在有新的东西要学。它解决了我的问题。