C# Wieso muss ein Enum initialisiert werden?

m3nt0r

Cadet 4th Year
Registriert
Nov. 2007
Beiträge
123
Hi,

wieso müssen enums initialisiert werden, wenn es ValueTypes sind? Ein Enum sollte doch bei der Deklaration automatisch den ersten Wert des Enums erhalten!?

Wenn ich ein Enum deklariere und gleich darauf zugreifen will erhalte ich eine Fehlermeldung ("Error: Use of unassigned local variable").
Wenn ich das Enum nur deklariere und im Debug Modus den Wert abfrage erhalte ich wie erwartet den ersten Wert des Enums.

LG m3nt0r
 
Gib mal bitte ein Beispiel was du genau meinst, so richtig werde ich nicht aus dem schlau was du oben erwähnt hast.

Denn so wie es jetzt da steht, sieht es so aus, dass du eine Enumeration erstellt hast, von dieser erstellst du wiederum ein Objekt.
Das kann nicht funktionieren, weil eine Enumeration keinen Default Contructor hat! Zu mal es von einem Designfehler zeugt, wenn man von einer Enumeration ein Objekt erzeugt, außer man hat es als Parameter in einer Methode eingebunden...

Hier ein Beispiel, wie ich deine Anfrage verstanden habe (darauf beziehe ich mich oben):
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Enumerations
{
    class Program
    {
        enum Test
        {
            One = 1,
            Two,
            Three,
            Four,
            Five
        }

        static void Main(string[] args)
        {
            Test test_;

            Console.WriteLine("{0}", test_);



            Console.ReadKey(true);
        }
    }
}

Du könntest aber die Initialisierung wie folgt machen:
Code:
Test test_ = default(Test);
Somit bekommt das Objekt den Standardwert zugewiesen, das wäre wie du gesagt hast in einer Enumeration 0, bei einer Klasse null.
Das gleiche findest du auch noch mal unten in den Links.


Hier sind weitere Infos zu diesem Thema:

MSDN - Enumeration
MSDN - Enumerationsmember
 
Zuletzt bearbeitet:
Code:
namespace ConsoleApplication1
{
    enum MyEnum
    {
        first,
        second,
        third
    }

    class Program
    {
        static void Main(string[] args)
        {
            MyEnum e; // e wird nicht initialisiert
        }
    }
}

Und die Frage ist jetzt wieso ich nicht auf "e" zugreifen kann? Enums sollten doch von Haus aus mit ihrem ersten Wert initialisiert werden.
 
... siehe einen Post über deinen... habe gerade meinen editiert gehabt... :D

... sprich #4
 
Zuletzt bearbeitet:
Ein uninitialisierte Variable zu verwenden ist ohnehin schonmal ein schlechter Programmierstil. In Java z.B. ist das sogar verboten.
 
@IceMatrix: In C# ebenso, wenn die entsprechende Kompiliereinstellung gewählt wurde, dass Warnungen als Fehler behandelt werden sollen. Diesen Schalter setze ich in jedem meiner eigenen Projekte, schon allein um solchen Ärgernissen nicht hinterher rennen zu müssen.
 
Zurück
Oben