| Autor |
Beitrag |
CSMN
      
Beiträge: 43
Erhaltene Danke: 2
|
Verfasst: 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.
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 Christian S.: Überflüssige Zeilenumbrüche entfernt
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: 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 
      
Beiträge: 43
Erhaltene Danke: 2
|
Verfasst: Do 02.09.10 00:10
Christian S. hat folgendes geschrieben : | | 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? |
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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 02.09.10 13:17
CSMN hat folgendes geschrieben : | | 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 
      
Beiträge: 43
Erhaltene Danke: 2
|
Verfasst: Do 02.09.10 17:36
|
|
CSMN 
      
Beiträge: 43
Erhaltene Danke: 2
|
Verfasst: Fr 03.09.10 02:29
vielleicht noch jemand eine idee wo der fehler liegt?
thx,
csmn
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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 
      
Beiträge: 43
Erhaltene Danke: 2
|
Verfasst: Fr 03.09.10 08:05
danielf hat folgendes geschrieben : | 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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 
      
Beiträge: 43
Erhaltene Danke: 2
|
Verfasst: Fr 03.09.10 12:49
Hey,
sorry, war mein Fehler - hatte was übersehen gehabt
funktioniert nun alles wie es sollte...
|
|