Как использовать switch-case со строками в c #? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь сделать действительно простую калькуляторную программу.Я получаю следующее сообщение об ошибке:

Невозможно неявно преобразовать тип 'bool' в 'string'

Вот мой код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2019_03_21
{
    class Program
    {
        private static double Negyzet(int alap, int kitevo)
        {
            Console.WriteLine("Kérem a hatvány alapját!");
            alap = int.Parse(Console.ReadLine());
            Console.WriteLine("Kérem a hatvány kitevojet!");
            kitevo = int.Parse(Console.ReadLine());
            return Math.Pow(alap, kitevo);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Kérem adja meg milyen műveletet szeretne elvégezni!\n\n+ összeadás\n- kivonás\n* szorzás\n/ osztás\n^hatványozás\n\nVálasztott művelet:");
            string muvelet = Console.ReadLine();
            switch (muvelet)
            {
                case (muvelet == "^"): Console.WriteLine("A hatvány értéke:     {0}", Negyzet(0, 0)); break;
                default: break;
            }
            Console.ReadKey();
        }
    }
}

Ответы [ 3 ]

3 голосов
/ 21 марта 2019

Вы неправильно используете предложение case.Он ожидает целочисленные значения или значения String, но вы предоставляете значение Boolean.Однако это легко исправить.Просто напишите предложение case следующим образом:

case "^":

Тогда оно должно скомпилироваться и работать как положено.

2 голосов
/ 21 марта 2019

muvelet - это строка, в то время как muvelet == "^" - это комариция, которая является логическим значением (либо true, либо false

switch(muvelet)  
{
     case "^":
         // code for when it is equal to "^"
          break;
    //other cases
    default:
         //it is unknown character
}

обратите внимание, что тип вашего переключателя (в данном случае это строка) должен соответствовать типу случаев

0 голосов
/ 22 марта 2019

До C # 6 инструкция переключения была зарезервирована для примитивных типов.Теперь вы можете переключаться на шаблоны.

Сопоставление шаблонов

И так вы можете делать такие вещи:

class Program
{
    static void Main(string[] args)
    {
        Print("+", 2, 2);
        Print("-", 2, 2);
        Print("/", 2, 2);
        Print("*", 2, 2);
        Print("^", 2, 2);
        Print("%", 2, 2);
        Print(" ", 2, 2);
        Print("", 2, 2);
        Console.Read();
    }
    static void Print(string op, int nmb1, int nmb2)
    {
        var res = Compute(op, nmb1, nmb2);
        Console.WriteLine(res != null ?
            $"{nmb1} {op} {nmb2} = {res}" :
            $"invalid {op?.Trim()} operator description");
    }

    static int? Compute(string op,int nmb1,int nmb2)
    {
        switch (op)
        {
            case "+":
                return nmb1 + nmb2;
            case "-":
                return nmb1 - nmb2;
            case "*":
                return nmb1 * nmb2;
            case "/":
                return nmb1 / nmb2;
            case "%":
                return nmb1 % nmb2;
            case "^":
                return nmb1 ^ nmb2;
            case var o when (o?.Trim().Length ?? 0) == 0:
                // white space
                return null;
            default:
                return null;
        }
    }
}

консольный вывод:

2 + 2 = 4
2 - 2 = 0
2 / 2 = 1
2 * 2 = 4
2 ^ 2 = 0
2 % 2 = 0
invalid operator 
invalid operator 
...