2015-06-02 2 views
-2

Я получаю сообщение «can not implicitly convert string to char». Я пытаюсь использовать следующий код, как я должен указать приведение в оператор case для оператора < =. любая помощь/направление приветствуются. Благодаря!C# - оператор 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()); 
     } 
    } 

нормально, у меня есть method1 так:

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; 

Я пытаюсь получить маркеры, если есть такое выражение, как (а + Ь) * (а-б). токены - это список строк. но то, что я также пытаюсь сделать здесь, также проверяет логические операторы, если они существуют в выражении ... ex: (a + b) < = 5, в этом случае я хочу проверить, равен ли следующий токен < =, если так добавить его в список токенов, цель состоит в том, чтобы иметь один метод для обработки всех операторов (+, -, *, /, < =,> =, ==,! =) и вызвать его в оператор сложения.

+1

Исправьте код. Этот код не будет компилироваться так, как есть. – ataravati

+1

Если у вас есть один символ, как это может быть два символа? Проверка не имеет смысла в первую очередь. Что вы на самом деле после? – hvd

+0

Кстати, как вы ожидаете, что 'test2.ToString()' будет равно "<="? Как один символ может быть равен двум символам? – ataravati

ответ

0

Вы можете использовать actionDictionary, чтобы сделать это вместо сазе переключателя:

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 
0

Вы пытаетесь использовать строку (вид) в инструкции коммутатора ('<=').

Я бы использовал карту из строки для функции, которая «делает что-то». Я обнаружил, что попытка заставить использовать переключатель вызывает больше проблем, чем решает.

Смежные вопросы