Hallo, ich würde gerne eine struct mit teilweise schon gültigen werten in einer Methode vervollständigen.
Gibt es etwas eleganteres als:
struct S_Circle
{
public int idx;
public double height; // y // CS on Pipe
public double angle; // x // CS on Pipe
public int diameterBottom; // for collision prevention calculation
public assembly asm;
public int length; // assembly length / heigth
public int diameterTop; // same like bottom if not flansch => different for flansch -> Cone
}
...
S_Circle GetAssemblyDimensions(int diaBottom, S_IsoHeight isoHeight, S_Circle incompleteCircleData)
in der Methode will ich nur
public int length; // assembly length / heigth
public int diameterTop; // same like bottom if not flansch => different for flansch ->
bearbeiten.
@Gerri3d
Übergib dein Struct doch als Parameter und setze dort dann die entsprechenden Werte.
Besser wäre es aber wenn du mit Properties arbeitest.
Dies ist sauberer als mit reinen public Membern und kann auch ungültige Werte mit direter Prüfung abfangen.
// Methode bekommt Referenz der ursprünglichen Struktur als Parameter um dort dann die eigentlichen Eigenschaften zu setzen
void GetAssemblyDimensions(S_Circle circle)
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
nun ja, es wird immer das Struct übergeben und auch benötigt. Bei jedem Aufruf. Also habe ich get/set richitg vertsanden, würde das nicht klappen
@T-Virus: Bei einer Struktur müßte man aber
void GetAssemblyDimensions(ref S_Circle circle) // bzw. besserer Name: SetAssemblyDimensions
verwenden, damit nicht nur die lokale Kopie verändert wird.
Dies erscheint mir aber kein Fall für eine Struktur zu sein (eben wegen der Kopie bei der Übergabe), sondern eine Klasse (mit Eigenschaften und Methoden).
@Th69
Stimmt, mein Fehler.
Ich verwende selten eigene Structs, deshalb vergesse ich das immer wieder.
@Gerri3d
Hier must du nur dein Struct als ref Parameter übergeben.
Was genau soll den mit get/set nicht stimmen?
Dies wird vom Compiler in entsprechende get_/set_ Methoden umgewandelt, was auch bei struct legietim sein sollte.
Gerade um ungültiger/falsche Werte abzufangen, sollte man immer auf Properties setzen.
Ebenfalls kann man nur mit Properties, die inneren(Member) der Klasse/Struct sauber vom äußeren Code abkapseln.
Gerade wenn man im Code häufige Aufrufe hat von den einzelnen Member und man dann ewig nach falschen Werten suchen muss, spart man sich durch korrektes abfangen von falschen Werten viel Zeit.
Dies dürfte in deinem Fall auch einige Fehlerquellen ausschließen, wenn du es sauber machst.
Aber bitte gib uns mehr Details, was hier ggf. nicht klappen sollte.
Dann kann man auch über eine entsprechende Lösung nachdenken.
Aus dem kurzen Code Snippet heraus erkenne ich aber keinen Grund, der gegen diesen Ansatz spricht.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Und bedenke, struct ist in 99% der Fälle die falsche Wahl.
Hallo Gerri3d,
Und bedenke, struct ist in 99% der Fälle die falsche Wahl.
bin derselben Meinung und habe auch noch nicht verstanden, warum man hier ein struct braucht.
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
mach dir gleich eine Klasse mit passendem Konstruktor. Struct ist auch nur die "Einschränkung" einer Klasse
OO gibts seit Platon - hatte der auch C#?
mach dir gleich eine Klasse mit passendem Konstruktor. Struct ist auch nur die "Einschränkung" einer Klasse
Was soll das genau heißen? Komm damit nicht zurecht...
Hiermit schon: https://docs.microsoft.com/de-de/dotnet/csharp/programming-guide/classes-and-structs/using-structs
Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄
Structs sind keine Klassen mit Einschränkungen, wie die Formulierung nahelegt, sondern ein völlig anderes Konzept, wo die Daten in einem anderen Speicherbereich liegen, sich bei der Zuweisung anders verhalten etc.
Kurz gesagt: Structs sind Werte, die kopiert werden, und Klassen sind Datenstrukturen, die referenziert werden. Das Thema ist aber hier im Forum auch schon des Öfteren diskutiert worden. Daher müssen wir das nicht nochmal alles ausführen.
Im Zweifelsfall würde ich mich daher eher an die Dokumentation halten.
Weeks of programming can save you hours of planning