Autor Beitrag
CSMN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43
Erhaltene Danke: 2



BeitragVerfasst: Mi 01.09.10 23:42 
hallo,

wenn ich in einen struct ein enum deklariere und das struct dann in einen button click event instanziiere dann kann ich nicht direkt
das vierte argument als Person.Genders.Mann verwenden. ich bekomme dort die fehlermeldung, dass die lokale Variable Person erst verwendet werden kann nachdem sie deklariert wurde.

ausblenden C#-Quelltext
1:
Person P2 = new Person("Heino""Brecht"2, Person.Genders.Mann);					


wenn ich das ganze aber in einen konsolenprogramm ausführe läuft es wunderbar. wo liegt mein fehler? was habe ich nicht beachtet? und wieso ist das verhalten so unterschiedlich?

besten dank
csmn

achso, im struct ist alles als public modifiziert...

Moderiert von user profile iconChristian S.: Überflüssige Zeilenumbrüche entfernt
Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 01.09.10 23:45 
Ich glaube, nur mit dem Codeschnipsel kann man das schwer sagen. Kannst Du mal die Deklaration des Enums zeigen? Ist das Enum selber als public deklariert?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
CSMN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43
Erhaltene Danke: 2



BeitragVerfasst: Do 02.09.10 00:10 
user profile iconChristian S. hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube, nur mit dem Codeschnipsel kann man das schwer sagen. Kannst Du mal die Deklaration des Enums zeigen? Ist das Enum selber als public deklariert?


ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
 public struct Person
    {
        public string firstName;
        public string lastName;
        public int age;
        public Genders gender;


        public Person(string _firstName, string _lastName, int _age, Genders _gender)
        {
            this.firstName = _firstName;
            this.lastName = _lastName;
            this.age = _age;
            this.gender = _gender;
        }

        public override string ToString()
        {

            return firstName + " " + lastName + " (" + gender + ") , Alter: " + age;

        }

        public enum Genders { Mann, Frau };

    }
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Do 02.09.10 13:17 
user profile iconCSMN hat folgendes geschrieben Zum zitierten Posting springen:
ich bekomme dort die fehlermeldung, dass die lokale Variable Person erst verwendet werden kann nachdem sie deklariert wurde.

Das heißt, du hast zusätzlich zum Klassennamen Person noch eine lokale Variable Person irgendwo definiert. Um solche Fehler zu vermeiden, solltest du lokale Variablen (und Parameter) immer klein schreiben.
CSMN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43
Erhaltene Danke: 2



BeitragVerfasst: Do 02.09.10 17:36 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconCSMN hat folgendes geschrieben Zum zitierten Posting springen:
ich bekomme dort die fehlermeldung, dass die lokale Variable Person erst verwendet werden kann nachdem sie deklariert wurde.

Das heißt, du hast zusätzlich zum Klassennamen Person noch eine lokale Variable Person irgendwo definiert. Um solche Fehler zu vermeiden, solltest du lokale Variablen (und Parameter) immer klein schreiben.


hi, nein ich habe keine lokale variable person. ich habe lediglich das struct so wie oben angezeigt geschrieben und im click event handler wollte ich mir die instanz mit

ausblenden C#-Quelltext
1:
Person P2 = new Person("Heino""Brecht"2, Person.Genders.Mann);					


erzeugen, wobei der fehler direkt auf Person.Genders.Mann zeigt mit der besagten fehlermeldung. und da dass ganze in einen konsolenprogramm einwandfrei läuft verwundert es micht halt bzw. sehe ich den fehler nicht.
CSMN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43
Erhaltene Danke: 2



BeitragVerfasst: Fr 03.09.10 02:29 
vielleicht noch jemand eine idee wo der fehler liegt?
thx,
csmn
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 03.09.10 07:25 
Hallo,

da ich mit struct normalerweise nicht arbeite frage ich mich, warum du struct verwendest? und warum du dann innerhalb des struct ein Enum definiertst (MSDN).

Hat das besondere Gründe? Warum nimmst du keine Klasse, damit sollte es gehen?

Gruß

PS: Das enum und die Eigenschaft sollte Gender heißen. Öffentliche Member sollte man auch nicht verwenden sondern besser eine Eigenschaft/Property.
CSMN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43
Erhaltene Danke: 2



BeitragVerfasst: Fr 03.09.10 08:05 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,
da ich mit struct normalerweise nicht arbeite frage ich mich, warum du struct verwendest? und warum du dann innerhalb des struct ein Enum definiertst. Hat das besondere Gründe? Warum nimmst du keine Klasse, damit sollte es gehen?


hi,

also vorteilhaft ist die anwendung eines structs, weil diese unter gewissen bedingungen eine bessere performance bringen als klassen. das trifft auf das obige struct zwar nicht zu aber wenn man nur value typen hat und sizeof der instanz <= 16 byte ist dann sollte man nen struct anstatt eine klasse verwenden. ansonsten kann man ja auch einfach die keywords struct gegen class austauschen. hintergrund ist die frage warum das in der konsole läuft und warum nicht in einer form? ist also mehr experimenteller natur. und ja über user-scoped propertys wäre es im realen einsatz natürlich besser gelöst, da hast du völlig recht.

gruß
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Fr 03.09.10 11:14 
Hallo,

die Fehlermeldung sagt eigentlich eindeutig aus, dass eine nicht initialisierte lokale Variable namens Person existiert. Wenn das bei dir nicht der Fall ist, dann hast du hier einen Fehler im C#-Compiler entdeckt. Glückwunsch :?

Um den Fehler zu umgehen, könntest du die Enum-Deklaration aus dem Struct heraus direkt in den Namespace verlegen.

Grüße,
Yogu
CSMN Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43
Erhaltene Danke: 2



BeitragVerfasst: Fr 03.09.10 12:49 
Hey,

sorry, war mein Fehler - hatte was übersehen gehabt :roll:
funktioniert nun alles wie es sollte...