将参数解析为案例

时间:2013-12-16 10:59:15

标签: .net parameters arguments case

我似乎无法找到解决方案,所以我只会问它。

我有一个接收字符串的方法,解释它并给出答案。如果出现问题,它会给出一个默认情况。

private string ProcessCommand(string str)
    {
        string result = "";
        switch (str)
        {
            case "hello":
                result = "Hello!";
                break;
            default:
                result = "Sorry, I do not recognize your command";
                break;
        }

        return result;
    }

现在我想提高一点。例如:我有一个命令getSurname +参数,因此输入为/getSurname Adam,我希望输出为Sandler。如何让我的代码通过我传入的参数/参数识别正确的命令?

2 个答案:

答案 0 :(得分:1)

尝试在同一参数中包含命令和值,并由特定字符(例如=)分隔。

然后你的参数字符串就像/getSurname=Adam

如果你需要将多个值传递给方法,你需要提出一个分离它们的方案(可能很好的html编码并像查询字符串一样传递它们。)

关于如何拆分分隔符的一些示例代码(假设str可以包含由空格分隔的多个参数):

string paramDelimiter = ' '
string[] params = str.Split(paramDelimiter);
string valDelimiter = '=';
foreach (string paramString in params) {
  if (paramString.IsNullOrEmpty()) continue;
  string[] paramAndVal = paramString.Split(valDelimiter);
  string param = paramAndVal[0];
  string val = paramAndVal[1];

  // logic goes here to switch through params and handle them 
  // based on the value that was passed
}

然后,您的函数代码将负责将每个参数解析为命令和值(或命令和名称/值对)并根据需要使用它们。

答案 1 :(得分:1)

我建议使用Regular Expression或string.split()将命令字符串解析为命令和参数数组。

演示:http://jsfiddle.net/Vrm7X/1/

代码:

$("#btnRun").on("click", function() {
    var commandString = $("#cmd").val(),
        commandArguments = commandString.split(" "),
        command = commandArguments.shift();

    alert("Your command is: " + command);
    for (arg in commandArguments) {
        alert("Argument " + arg + ": " + commandArguments[arg])   
    }
});

对于扩展的命令语法,您应该使用正则表达式来解析

之类的内容
/surname -Name John -Age 33

Command: surname
Argument 'Name': John
Argument 'Age': 33