Unterschiedliche Parameterauflösung



  • Hallo,
    ich habe ein Verständnisproblem. Warum wird in folgendem Snipped, bei gegebenem "e" in der TextBox,...

    private void button1_Click(object sender, EventArgs e)
            {
                var lw = textBox1.Text;
                TraverseFileSystem(lw + @":\"); // public void TraverseFileSystem(String strDir){}
    		}
    

    ... der Parameter im Methodenaufruf zu "e:\" aufgelöst wird? Durch den doppelten Backslash schlägt der Methodenaufruf natürlich fehl.

    Hier bei Directory.EnumerateFiles wird der Parameter korrekt("e:\") aufgelöst.

    private void button1_Click(object sender, EventArgs e)
            {
                var lw = textBox1.Text;
                var files = from file in Directory.EnumerateFiles(lw + @":\", pattern, SearchOption.AllDirectories)
                            ...
                            {
                                File = file,
                                Line = line
                            };
    		}
    

    Kann mir das jemand erklären?

    Danke im voraus


  • Administrator

    Wie bitte?
    http://ideone.com/cvdO4I
    Das ist das erwartete Verhalten von meiner Seite. Was hast du erwartet und wieso? 😕

    Grüssli



  • http://ideone.com/ckBJzT

    Das @ vor der String hat auch eine besondere Bedeutung.

    http://ideone.com/TOYjD6

    @"e:\" == "e:\\"
    


  • Oh sorry, im Beitrag ist ein typo drin. Im Fall vom Methodenaufruf wird lw + @":\" zu "e:\" aufgelöst. Und das ist nicht das erwartete Verhalten. Eure drei Links geben das wieder was ich auch erwartet habe bzw. bisher kannte. Im beschriebenen Fall ist das aber nicht so, und löst somit Verwunderung bei mir aus.

    Edit: Hier im Forum werden die Backslashes weggekürzt, deshalb werden in beiden Beiträgen meine Aussagen verfälscht. Es soll heißen: lw + @":Backslash" wird zu "e:BackslashBackslash" aufgelöst.


  • Administrator

    1. Du schreibst aber nicht @":\\" ? Das wäre nämlich falsch und würde in einem doppelten Backslash resultieren. Der Backslash hat keine Escape-Wirkung in einem String-Literal mit dem @-Zeichen davor.
    2. Wo genau schaust du dir den Inhalt der Variable an? In der TextBox? Oder im Debugger mit "MouseOver"? Beim "MouseOver" im Debugger wird nämlich für einen Blackslash die Escape-Sequence angezeigt, also Backslash-Backslash.

    Falls das alles nicht weiterhilft, wäre ein simples Konsolenprogramm sinnvoll, welches das Verhalten reproduziert, damit wir uns das anschauen können. Simpel heisst bitte nicht mehr als 10-20 Zeilen 😉

    Grüssli



  • Dravere schrieb:

    1. Du schreibst aber nicht @":\\" ? ...

    Nein.

    Dravere schrieb:

    2. Wo genau schaust du dir den Inhalt der Variable an? In der TextBox? Oder im Debugger mit "MouseOver"? Beim "MouseOver" im Debugger wird nämlich für einen Blackslash die Escape-Sequence angezeigt, also Backslash-Backslash.

    Danke das war die Aufklärung, das wusste ich noch nicht. Bin im Debugger nach einem Breakpoint Step by Step vorgegangen und bekam sowohl beim Mouseover als auch in der Autoanzeige immer den "falschen" Wert angezeigt.
    Das Scheitern der Ausführung hat aber einen anderen Grund gehabt, den ich durch mein Unwissen gar nicht erst erreicht habe. Tja man sollte sich die Exception-Message doch mal genauer ansehen. 🙂

    Nochmal danke.


Anmelden zum Antworten