In a situation, when working on a project larger group of programmers sometimes difficult to keep people of obvious errors. Such a mistake is to forget about the default initialization of variables in the case enum. Below you can find simple example:
public enum DzienTygodnia { Poniedzialek = 1, Wtorek = 2, Sroda = 3, Czwartek = 4, Piatek = 5, Sobota = 6, Niedziela = 7 }
And two calls:
DzienTygodnia dzien = new DzienTygodnia(); System.Console.Out.WriteLine("Dzien: " + dzien); System.Console.Out.WriteLine(); DzienTygodnia dzien2 = DzienTygodnia.Poniedzialek System.Console.Out.WriteLine("Dzien2: " + dzien2); System.Console.Out.WriteLine();
Running the code designed so we get the following results:
Dzien: 0 Dzien2: Poniedzialek
The problem does not seem to be complicated, but blood can spoil everything. Now, What happened. The compiler initializes the variable dzien the default value 0, that is not listed in the definition DzienTygodnia.
Please also note, that this problem occurs when using DzienTygodnia as a component of the structure and class:
public struct StructDzienTygodnia { DzienTygodnia dzien; ... public StructDzienTygodnia(DzienTygodnia _dzien) { dzien = _dzien; } public DzienTygodnia Dzien { get { return dzien; } } } public class ClassDzienTygodnia { DzienTygodnia dzien; ... public ClassDzienTygodnia(DzienTygodnia _dzien) { dzien = _dzien; } public DzienTygodnia Dzien { get { return dzien; } } }
In the case of the class, the situation is much better than in the case of the structure. Despite the fact, that the structure is defined constructor, which replaces the default constructor the compiler allows us to structure definition using the default constructor, that is:
StructDzienTygodnia dzien3 = new StructDzienTygodnia();
Of course, if in this situation, check the value of it will be wrong – 0.
A little better is the situation, when we use enum in the classroom. Then, if you define your own constructor, then we can use the default constructor. The compiler reports an error. In this situation, the problem of error is transmitted outside the class because, after all, you can always create an object in the following manner:
ClassDzienTygodnia dzien6 = new ClassDzienTygodnia(new DzienTygodnia());
Well, but it is rather a deliberate action, the programmer.
But concludes. Creating any enum always remember, to one of its value was 0. Therefore, the original definition should look like this:
public enum DzienTygodnia { Blad = 0, Poniedzialek = 1, Wtorek = 2, Sroda = 3, Czwartek = 4, Piatek = 5, Sobota = 6, Niedziela = 7 }
jeśli chodzi o ‘0’ to warto przeczytać:
http://blogs.msdn.com/b/kcwalina/archive/2004/05/18/134208.aspx
Ja bym niedzielę ustawił na 0 🙂
u mnie DzienTygodnia dzien = DzienTygodnia.Poniedzialek; daje wynik Poniedzialek
I tak powinno być. Zrobiłem mały błąd przyklejając kod.
Teraz już jest ok.
‘ dzien2’ da 0 a ‘dzien’ da poniedzialek
Pozdrawiam