c# - 逻辑运算符的case语句

时间:2015-06-02 23:14:59

标签: c#

我得到"不能隐含地将字符串转换为char"错误。我正在尝试以下代码,我应该如何在< =运算符的case语句中指定强制转换。任何帮助/方向表示赞赏。谢谢!

char test1;
    switch(test1)
    {
       case '+':
        //do something
        break;

      case '-' : case '*' : case '<=' :
       //method1
       break

    method 1:

    private void method1(char test2)

    {
      if(test2 == '+' || test2 == '*' || test2.ToString() == "<=")
       {
         token.Add(test2.ToString());
       }
    }
好吧,我有一个像这样的方法1:

private void Method1(char test2)
{
  if(test2 == '+' || test2 == '-' || test2 == '/' || test2 == '*')
    {
       //code
       tokens.add(test2);
    }

char test1;
        switch(test1)
        {
           case '+': case '-' : case '*': case '/':
            Method1(test1);
            break;

如果有像(a + b)*(a-b)这样的表达式,我正试图获取令牌。令牌是这里的字符串列表。但是,我在这里尝试做的还是检查逻辑运算符是否存在于表达式中... ex:(a + b)&lt; = 5,在这种情况下,我想检查下一个标记是否是&lt; =,如果是这样,将它添加到令牌列表中,目标是有一个方法来处理所有运算符(+, - ,*,/,&lt; =,&gt; =,==,!=)和在switch case语句中调用它。

2 个答案:

答案 0 :(得分:0)

您正在尝试在switch语句('<=')中使用String(种类)。

我使用字符串中的映射到&#34;做某事&#34;的函数。我发现试图强行使用开关导致的问题多于解决的问题。

答案 1 :(得分:0)

您可以使用actionDictionary来代替switch case语句:

private void Test(string operant)
{
    Dictionary<string, Action> actionMap = new Dictionary<string, Action>();
    // map operant to action methods
    actionMap.Add("+", new Action(AddToken));
    actionMap.Add("-", new Action(AddToken));
    actionMap.Add("*", new Action(AddToken));
    actionMap.Add(">=", () =>
    {
        // anynomous method
        token.Add(">=");
    });
    actionMap.Add("/", new Action(Divide));
    actionMap.Add("<=", new Action(LessThanOrEqual));

    // list keep continue here


    foreach (string key in actionMap.Keys)
    {
        if (key == operant)
        {
            actionMap[key]();
        }

    }
}

private void AddToken()
{
}

private void Divide()
{
}

private void LessThanOrEqual()
{
}

// .. and so on