With in C#

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von AliveDevil.

    Hallo Zusammen,

    Ich möchte gerade in C# viele Eigenschaften eines SaveFileDialogs ändern. Allerdings gibt es keine with Schleife wie in Visual Basic.

    Wie wird dies in C# geregelt?

    LG
    With ist keine Schleife.
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    FunnySunny schrieb:

    Du erstellst dir ein Objekt des Dialogs und änderst für dieses die Eigenschaften?

    Ich habe mir aus der Toolbox einen SaveFileDialog ins Projekt gezogen und von diesem möchte ich die Eigenschaften verändern.

    Nikx schrieb:

    With ist keine Schleife.

    Laut einem Tutorial was ich mal gesehen habe, soll es angeblich eine Schleife sein. Aber man lernt ja nie aus ;)
    Du kannst direkt bei der Instanzierung die Eigenschaften so ähnlich wie bei With ändern

    C#-Quellcode

    1. AnyObject obj=new AnyObject() {.AnyProperty=... , .AnyProperty2=...};

    Danach geht's aber nicht mehr, sondern musst dann den Namen immer neu schreiben.
    Mfg
    Compffreak
    Eine Schleife iteriert.
    Zu deiner Frage: With gibt es in C# afaik nicht. Schreib einfach immer den Namen der Variable davor.

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Ich habe auch in VB nie verstanden, wozu With sinnvoll sein soll.
    Außer vielleicht, um die Lesbarkeit des Codes zu vermindern.

    Am geilsten finde ich Mehrfach-With-Konstruktionen oder geschachteltes With

    Wer zur Code-Klarheit beitragen will, gibt das Objekt mit an und verwendet kein With.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Nikx schrieb:

    Schreib einfach immer den Namen der Variable davor.

    Oder einfach den Object Initializer nehmen, wie @compffreak es da gemacht hat. Das kommt ​With wohl gleich.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Nö. Der Object Initializer ist wie der Name sagt ein Initializer. Vielleicht bekommt er das Objekt irgendwo her und es ist bereit initialized? Oder, in seinem Fall:

    Ich habe mir aus der Toolbox einen SaveFileDialog ins Projekt gezogen

    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
    Wozu dann aber With benutzen, wenn das Objekt schon initialisiert ist? In dem Sinne dann, um mehrere Eigenschaften abzuändern? Dann wäre das natürlich was anderes. Scheint auch so zu sein, wenn der TE das so machen möchte.

    msdn.microsoft.com/en-us/library/wc500chb.aspx
    Ich hatte mir das halt so wie in den Codebeispielen vorgestellt, dass man dann entsprechend einem "leeren" (frisch instanziiertem) Objekt bei den Eigenschaften die Werte zuweist, aber gut, scheint in dem Fall dann anders zu sein. Muss zugeben, bin nicht mehr so fit in VB.NET, dass ich da 100%ig sagen könnte, was man mit With alles anstellen kann. Dachte halt, das ist für so ein Äquivalent konzipiert.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Einfache Variante ohne With

    VB.NET-Quellcode

    1. Dim di = New IO.DirectoryInfo("c:\")
    2. Dim FileInfoList = di.GetFiles("*.*")
    3. Dim NameList = New List(Of String)
    4. For Each fi In FileInfoList
    5. NameList.Add(fi.FullName)
    6. NameList.Add(fi.LastAccessTime.ToString)
    7. Next


    Dasselbe mit With

    VB.NET-Quellcode

    1. Dim NameList = New List(Of String)
    2. With New IO.DirectoryInfo("c:\") 'initialisierendes With
    3. Dim FileInfoList = .GetFiles("*.*")
    4. With Namelist 'bereits initialisiert, erspart das mehrfache Schreiben des Objektnamens
    5. For Each fi In FileInfoList
    6. .Add(fi.FullName)
    7. .Add(fi.LastAccessTime.ToString)
    8. Next
    9. End With
    10. End With

    Über die fachliche Sinnhaftigkeiz des Code bitte nicht diskutieren.
    Ich möchte damit nur zeigen, dass With im allgemeinen die Übersichtlichkeit verringert.
    Allenfalls das erste initialisierende With würde ich noch akzeptieren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    MarvinKleinMusic schrieb:

    keine with Schleife
    Meinst Du so was:

    C#-Quellcode

    1. using (SaveFileDialog dlg = new SaveFileDialog() { Filter = "PNG|*.png", InitialDirectory = "c:\\Temp" })
    2. {
    3. dlg.ShowDialog();
    4. }

    @compffreak ohne Punkt vor den Properties.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Du kannst auch Extension-Methods dafür verwenden.

    C#-Quellcode

    1. public static void With<T>(this T t, Action<T> func)
    2. {
    3. func(t);
    4. }
    5. public static T WithRef<T>(this T t, Action<T> func)
    6. {
    7. func(t);
    8. return t;
    9. }

    Nutzung wäre dann:

    C#-Quellcode

    1. obj.With(o =>
    2. {
    3. o.Property = value;
    4. o.Irgendetwas();
    5. });

    oder

    C#-Quellcode

    1. obj = (new Obj()).WithRef(o =>
    2. {
    3. o.Property = value;
    4. o.Irgendetwas();
    5. });

    Wie du Extension-Methods erzeugst, kannst du dir afaik hier im Forum oder durch eine Google-Suche aneignen.