2016-09-28 2 views
-2

Как использовать значения enum в корпусах переключателей? вот мой код:C# Как сделать Enum как переключатель?

//public Variables   
    double rat; 
    string M; 
    public enum operations {add = 1, sub = 2, mult = 3, div = 4} ; 
    bool NewText = false; 

    private void btnmult_Click(object sender, EventArgs e) 
    { 
     //Button "*" 
     operations value = operations.mult; 
     rat = Convert.ToDouble(result.Text); 
     label1.Text = rat + " *"; 
     result.Text = ""; 
    } 
     private void EqualButton_Click(object sender, EventArgs e) 
    { 
     switch (operations) // this is the point which is am confused at 
     {    
      case (operations.mult): //multiplyication 
       TheEqualMult(rat); 
       label1.Text = ""; 
       break; 
     } 
    } 

Теперь Что я должен писать после переключения между словом()? то, что я хочу напечатать, - это значение перечисления, которое относится к 1 или 2 или 3 или 4, чтобы кнопка могла знать, что является правильной операцией для входа.

+5

'switch (value)', если 'value' содержит интересующее вас значение. Btw рассмотрим следующие [соглашения об именах .NET] (https://msdn.microsoft.com/en-us/library/ ms229002.aspx). Такие вещи, как классы, перечисления, методы PascalCased в .NET. – Groo

+0

Я получаю в case (operations.mult) «Windows_Calculator.Form1.operations» до «int». Явное преобразование существует (вы не пропустили литье?) » –

+1

Просто примечание: как правило, перечисления должны быть (т.е. «операция»), если они не могут быть объединены. – Jamiec

ответ

0

Ниже то, что вы ищете.

Обратите внимание, что при объявлении перечислений значения будут автоматически присваиваться поэтапно. По умолчанию первое значение равно нулю, если вы не переопределите его.

В вашей инструкции switch вы используете переменную, значение которой вы используете, - в вашем случае.

double rat; 
string M; 
public enum operations 
{ 
    add = 1, 
    sub, 
    mult, 
    div 
} ; 
bool NewText = false; 
operations value; 

private void btnmult_Click(object sender, EventArgs e) 
{ 
    //Button "*" 
    value = operations.mult; 
    rat = Convert.ToDouble(result.Text); 
    label1.Text = rat + " *"; 
    result.Text = ""; 
    } 

private void EqualButton_Click(object sender, EventArgs e) 
{ 

    switch (value) // use a variable at this point 
    {    
     case operations.mult: //multiplication 
      TheEqualMult(rat); 
      label1.Text = ""; 
      break; 
     case operations.add: //addition 
      .... 
      break; 
     case operations.sub: //subtraction 
      .... 
      break; 
     case operations.div: //division 
      .... 
      break; 
     default: //invalid operation 
      .... 
      break; 
    } 
} 

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

+0

Я все еще получаю сообщение об ошибке «Windows_Calculator.Form1.operations» в «int». Явное преобразование существует (вы пропускаете листинг?) « –

+0

Где вы можете получить эту ошибку - я пробовал код и не получил эту ошибку , – PaulF

+0

nah i только показал многократный случай, как пример, у меня еще 3 операции –

0

В промежутках между круглыми скобками вы не используете «операции» тип), но переменная (которую вы назвали «значение» 5 строк раньше). Также в случаях (две строки после трудной строки) вам не нужно использовать круглые скобки (они не вредят, за исключением других, с которыми вы сотрудничаете)

+0

Я получаю эту ошибку «Windows_Calculator.Form1.operations» до «int». Явное преобразование существует (вы пропускаете листинг?) « –

+0

Можете ли вы предоставить какой-то код? Обратите внимание, что Enum является int в своем ядре, поэтому преобразование из Enum в int может выполняться неявно, но чтобы перейти от int к Enum, вам нужно явно указать. например 'int i = myEnum.OptionOne' и обратный 'myEnum x = (myEnum) 1' - из ошибки, я предполагал, что вторая происходит. – Theo

2

Ваш текущий примерный метод имеет значение, жестко закодированное в «Mult «но я предполагаю, что это будет изменено в вашей реальной реализации.

Предполагая, что «значение» содержит значение перечисления, соответствующее кнопка нажата, ваш коммутатор заявление следует включить эту переменную:

switch(value) 
+0

Что я должен делать в случаях, чтобы придать значение operations.mult? –

+0

Это будет происходить от кнопки, это само по себе - возможно, в вашем случае args. – Theo