Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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#_String_Split - Fatal编程技术网

C# 将拆分字符串的一部分设置为公共,另一部分设置为本地

C# 将拆分字符串的一部分设置为公共,另一部分设置为本地,c#,string,split,C#,String,Split,对于(可能的)基本问题,我表示歉意,但我正在尝试拆分一个字符串,并将字符串的一部分公开,以便稍后在其他类中以表单形式调用它 这是一个简单的Skype聊天机器人,它读取发送给我处理的消息。然而,我正试图这样做,如果有人用两个词发送命令-例如!命令名-命令名!命令将被处理,稍后在表单中,我将使用分割字符串的第二部分来处理它。这就是我正在尝试的- 消息的拆分和读取- public void skype_MessageStatus(ChatMessage msg, TChatMessageStatu

对于(可能的)基本问题,我表示歉意,但我正在尝试拆分一个字符串,并将字符串的一部分公开,以便稍后在其他类中以表单形式调用它

这是一个简单的Skype聊天机器人,它读取发送给我处理的消息。然而,我正试图这样做,如果有人用两个词发送命令-例如!命令名-命令名!命令将被处理,稍后在表单中,我将使用分割字符串的第二部分来处理它。这就是我正在尝试的-

消息的拆分和读取-

  public void skype_MessageStatus(ChatMessage msg, TChatMessageStatus status)
    {
        if (msg.Body.IndexOf(trigger) == 0 && TChatMessageStatus.cmsReceived == status)
        {
            string command = msg.Body.Remove(0, trigger.Length).ToLower();
            var splitted = command.Split(' ');
            string command1 = splitted[0];
            string name = splitted[1];
            msg.Chat.SendMessage(nick + ProcessCommand(command1));
        }
    }
在这个聊天机器人中还有其他几个命令,所以有一个包含不同结果的开关-例如!命令,我有-

 case "command":
 result = command();
 break;
最后-

       private string command()
    {
        WebRequest.Create("API I have" + name);
        new WebClient().DownloadString("API I have" + name);
    }

我希望能够使用'名称'在这里,从分裂的消息。谢谢,非常感谢您的帮助。

首先,定义要用于解析入站邮件的模式。看起来您有多个可能具有不同参数的命令,但所有命令都采用以下形式:

![Command String] [Command Parameters]
因此,您需要一个表示以下内容的类:

public class ChatCommand
{
    private string _command;
    public string Command { get { return _command; } }

    private string _parameters;
    public string Parameters { get { return _parameters; } }

    public ChatCommand(string command, string parameters) {
        _command = command;
        _parameters = parameters;
    }
}
从这里开始,您需要调整您发布的方法,使其看起来像这样。请注意,我们现在告诉split在返回2个字符串时停止拆分(基本上只在第一个空格上拆分)

我们之所以将参数保留在一个字符串中,而不是将其拆分,是因为这样可以灵活地为不同的命令设置不同的参数格式。例如,您可能希望有一个发送图片的命令,第二个参数是URL,或者可以是JSON数据或二进制文件数据

现在,您的ProcessCommand函数可以如下所示:

public void ProcessCommand(ChatCommand command) {
    switch(command.Command) {
        case "command":
            //I am code specific to that command and I should know what is contained in the Parameters property of the command
            Console.WriteLine("Name is " + command.Parameters);
        break;
    }
}

那你就完了!您可以添加更多带有任何参数的命令。

首先,定义要用于解析入站消息的模式。看起来您有多个可能具有不同参数的命令,但所有命令都采用以下形式:

![Command String] [Command Parameters]
因此,您需要一个表示以下内容的类:

public class ChatCommand
{
    private string _command;
    public string Command { get { return _command; } }

    private string _parameters;
    public string Parameters { get { return _parameters; } }

    public ChatCommand(string command, string parameters) {
        _command = command;
        _parameters = parameters;
    }
}
从这里开始,您需要调整您发布的方法,使其看起来像这样。请注意,我们现在告诉split在返回2个字符串时停止拆分(基本上只在第一个空格上拆分)

我们之所以将参数保留在一个字符串中,而不是将其拆分,是因为这样可以灵活地为不同的命令设置不同的参数格式。例如,您可能希望有一个发送图片的命令,第二个参数是URL,或者可以是JSON数据或二进制文件数据

现在,您的ProcessCommand函数可以如下所示:

public void ProcessCommand(ChatCommand command) {
    switch(command.Command) {
        case "command":
            //I am code specific to that command and I should know what is contained in the Parameters property of the command
            Console.WriteLine("Name is " + command.Parameters);
        break;
    }
}

那你就完了!您可以添加更多带有任何参数的命令。

将其作为包含类中的
public
属性。或者是一个
private
属性,如果您只是在类中内部使用它。在包含类中将其设置为
public
属性。或者一个
私有的
一个,如果你只是在课堂内部使用它。非常感谢你的代码,我想说这很好地解决了我的问题。非常感谢你!尽管我有一个问题-msg.Chat.SendMessage(nick+ProcessCommand(command1));是给我一个错误-运算符“+”不能应用于“string”和“void”类型的操作数很抱歉打扰了您,但是我能做些什么呢?提前谢谢。哦,对不起。如果您希望从ProcessCommand返回字符串,则需要将其从void函数更改为string函数,并确保从每个案例中返回适当的字符串。啊,不用担心!我一定会把它修好的:)再次谢谢你!非常感谢你的代码,我想说这很好地解决了我的问题。非常感谢你!尽管我有一个问题-msg.Chat.SendMessage(nick+ProcessCommand(command1));是给我一个错误-运算符“+”不能应用于“string”和“void”类型的操作数很抱歉打扰了您,但是我能做些什么呢?提前谢谢。哦,对不起。如果您希望从ProcessCommand返回字符串,则需要将其从void函数更改为string函数,并确保从每个案例中返回适当的字符串。啊,不用担心!我一定会把它修好的:)再次谢谢你!