enum, sprawdzanie warunku z obiektem.

0

Przepraszam za temat posta, ale nie miałem szczególnej weny na takie pytanie.
Chcę stworzyć prosty kalkulator w C# w WPF.
kod jest z tutoriala, stąd pytam dla pewności.

**pierwsze pytanie: **
jeśli do none przypisujemy 0 to jak to jest traktowane w "enum"? jako int?

**druga główna sprawa: **
tworzymy obiekt LastOperation i przypisujemy mu Operation.none none = 0;
w przypadku gdy chcemy nacisnąć przecinek, musimy sprawdzić czy wśród podanej liczby nie ma już przecinka lub czy tekst nie jest pusty.

Jeśli sprawdzamy warunek : if (Operation.result == LastOperation ) to LastOperation ma wartość taką jak nowy obiekt ( domyślnie 0 <-> Operation.none) czy taką jaką przypisałem mu po raz ostatni w kodzie?

 namespace KALKULATOR
{ 
enum Operation
    {
        none = 0, // brak operacji
        addition, // dodawanie
        subtraction, // odejmowanie
        multiplication, // mnożenie
        division, // dzielenie
        result // wynik
    }
    public partial class MainWindow : Window
    {
     private Operation LastOperation = Operation.none;


        public MainWindow()
        {
            InitializeComponent();
        }

        private void NumberButton_Click(object oSender, RoutedEventArgs eRoutedEventArgs)
        {
            if (Operation.result == LastOperation )
            {
                txtDisplay.Text = string.Empty;
                LastOperation = Operation.none;
            }
            Button oButton = (Button)oSender;
            txtDisplay.Text += oButton.Content;
        }

        private void CommaButton_Click(object oSender, RoutedEventArgs eRoutedEventArgs)
        {
            if (Operation.result == LastOperation )
            {
                txtDisplay.Text = string.Empty;
                LastOperation = Operation.none;
            }
            if ((txtDisplay.Text.Contains(',')) || (0 == txtDisplay.Text.Length))
            {
                return;
            }
            txtDisplay.Text += ",";
        }
}
0
  1. enum to takie opakowanie na int (albo inny typ liczbowy, jeśli to zdefiniujesz), które pozwala wartościom liczbowym nadać czytelne nazwy.
  2. Tak, zmienne nie zmieniają swoich wartości same z siebie, mają takie, jakie im ustawisz.

Tak poza tym, to elementy enumów w C# piszemy wielką literą, a poza tym, to w if raczej pisze się zmienna == stała, a nie odwrotnie.

0
somekind napisał(a):
  1. enum to takie opakowanie na int (albo inny typ liczbowy, jeśli to zdefiniujesz), które pozwala wartościom liczbowym nadać czytelne nazwy.
  2. Tak, zmienne nie zmieniają swoich wartości same z siebie, mają takie, jakie im ustawisz.

Tak poza tym, to elementy enumów w C# piszemy wielką literą, a poza tym, to w if raczej pisze się zmienna == stała, a nie odwrotnie.

  1. "albo inny typ liczeniowy, jeśli to zdefiniujesz" a definiuję to np.(dla double) poprzez dodanie przecinka jak na liczbę zmiennoprzecinkową przystało ? bo nie ma czegoś takiego jak double enum lub int enum.

  2. sorki, ale nie do końca zrozumiałem odpowiedź.
    zatem w tym przypadku zmienna LastOperation:
    a) ma wartość taką jak nowy obiekt ( domyślnie 0 <-> Operation.none)
    b) ma wartość taką jaką przypisałem mu po raz ostatni w kodzie

1
  1. Nie no, oczywiście, że typ zmiennoprzecinkowy nie może być podstawą dla enuma, przecież to by nie miało żadnego sensu. Dozwolone podstawy to: byte, sbyte, short, ushort, int, uint, long, ulong. Składnia jest taka: enum Operation : short.

  2. Taką jaką przypisałeś. Jeśli nie przypiszesz żadnej, to będzie miał wartość domyślną, czyli tą, która ma wartość liczbową 0.

1 użytkowników online, w tym zalogowanych: 0, gości: 1