![]() |
AW: Delphi "with variable do" in C#
Goto ist nicht böse ... man kann es nur genauso böse einsetzen, wie ein True.
Delphi-Quellcode:
ist auch nur ein
if not b then begin
... end;
Delphi-Quellcode:
is b then goto ende;
... ende:
Delphi-Quellcode:
if b = true then Böse;
  |
AW: Delphi "with variable do" in C#
Man hat bei goto auch keine Möglichkeit zu ermitteln woher der Sprung kam
|
AW: Delphi "with variable do" in C#
Goto macht eigentlich nur bei Shell-Skripten (*.bat/*.cmd) Sinn, wenn man dort z.B. mit einem Auswahlmenü arbeiten will/muss
|
AW: Delphi "with variable do" in C#
Man kann sich dieses with-do-Konstrukt in C# mit Extension Methods und Delegaten zusammenbasteln:
Code:
public static class Extender
{ public static void WithDo<T>(this T obj, Action<T> act) { act(obj); } } // ... Sehr.Langer.Name.WithDo(v => { v.name = "xyz"; v.alter = 89; }); |
AW: Delphi "with variable do" in C#
Gratulation, du hast die Variablendeklaration neu erfunden :mrgreen: .
@Topic: Für ![]() |
AW: Delphi "with variable do" in C#
Ist ja aber nicht das gleich wie with, da es nicht mit breits länger erzeugten, sondern nur gerade neu erzeugten Objekten funktioniert (oder?)
|
AW: Delphi "with variable do" in C#
'with Obj do' ist also böse, ja? Gähn. Der Depp, der das falsch einsetzt ist böse. Nicht das Konstrukt an sich.
Wenn ich mit diesen DevExpress-Komponenten arbeite, die ellenlange Objekthierarchien beinhalten, ist so ein 'With' einfach mal Gold wert. Wenn man weiß, wie man es einsetzt. Beispiel (Ich würde immer die erste Variante vorziehen):
Delphi-Quellcode:
Da das in C# nicht geht, behelfe ich mir -mangels 'WITH'- mit einer privaten Methode ('Clean Code' lässt grüßen)
With TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End do begin
SpecialFoo := 1; SpecialBar := 2; End; // oder TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End.SpecialFoo := 1; TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End.SpecialBar := 2;
Code:
(Geht das mit dem 'Var' in C#?) Egal.
private void InitializeSpecialObject (var specialObject : SpecialObject);
{ specialObject.specialFoo = 1; specialObject.specialBar = 2; } ... InitializeSpecialObject (var TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End); ... Hmmm. Irgendwie eine Steigerung in Punkto 'Lesbarkeit', oder? Also: Das WITH war eine nette Idee, bevor es Klassen gab. Mit Klassen und doofen unvorsichtigen Programmierern kamen die Probleme. In der Folge hat man (u.A. bei C#) darauf verzichtet. Und, hey, eine neue Methode, die auch noch in ihrem Namen beschreibt, was da eigentlich passiert, ist doch eh besser als ein extrem intelligent eingesetztes WITH. Denn da weiss ich immer noch nicht, wieso der Programmierer das WITH nu benutzt oder was er da eigentlich gemacht hat. Gewöhn Dir also das 'WITH' ab. Nicht weil es böse ist, das kleine 'with', sondern weil es was Besseres gibt. PS: (Visual)Basic kann das übrigens auch, mit dem WITH. Auch ein Grund, es *nicht* zu verwenden. :stupid: |
AW: Delphi "with variable do" in C#
Zitat:
ich nehme lieber kurze lokale Refrenzen
Code:
obwohl der Vorschlag von alzaimar die sprachübergreifende sauberste Lösung ist!
EndObject theEnd = TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End;
theEnd.SpecialFoo = 1; theEnd.SpecialBar = 1; |
AW: Delphi "with variable do" in C#
Zitat:
Code:
var end = TheObject.HasAnAttribute.WhichHasMore.Gosh.Will.ThisEver.End;
end.SpecialFoo=1; end.SpecialBar = 2; |
AW: Delphi "with variable do" in C#
Was hat eine lokale Variable ohne jeglichen Wert im Code zu suchen? :-D) Aber wir beginnen mit einer Glaubensfrage.
So geht's natürlich auch. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz