Autor Beitrag
Kickerkalle
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 02.03.16 21:35 
Hallo zusammen,

bin absoluter Anfänger auf dem Gebiet von C# und nutze Visual Studio 2013. Habe in der Uni aber derzeitig in der Vorlesung den Einstieg für C#.
Ich habe mir nachfolgenden Code aus unserem Script angesehen und bin ein wenig am verwirrt. Kann mir vielleicht jemand genau erklären, was genau im Code passiert?
Die Function wurde erstellt, um zu überprüfen, ob das ds den Wert enthält. Später wird mit diesem Wert weiter verfahren.
Was passiert zum Beispiel, wenn das ds keine Zeile enthält? vZeile dann = -1?

Hoffentlich könnt ihr mir helfen.
Vielen Dank schon im voraus.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
Private Function vZeile()

        Dim zeile As Integer
        Vwert = 0
        Wwert = -1
        
        While Vwert < ds.Tables(0).Rows.Count
            
            If ds.Tables(0).Rows(Vwert).Item(0) = combobox.Text Then
                Wwert = Vwert
                Vwert = ds.Tables(0).Rows.Count
            End If
            Vwert = Vwert + 1
        End While
    End Function


Moderiert von user profile iconChristian S.: B- durch Code-Tags ersetzt
Moderiert von user profile iconChristian S.: Topic aus WinForms verschoben am Mi 02.03.2016 um 21:36
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 02.03.16 22:35 
Das ist kein C#, sondern Visual Basic :gruebel:

Soweit ich den Code lesen kann, indiziert Vwert die Zeile in der Tabelle. Die while-Schleife erhöht Vwert so lange, bis in der Zeile mit diesem Index an erster Stelle der Text steht, der in der combobox ausgewählt wurde. Dann merkt man sich diesen Index in der Variable Wwert und setzt Vwert auf die Zeilenanzahl der Tabelle, damit die Bedingung der while-Schleife false wird und diese verlassen wird (gibt es in VB kein break?).

Ich sehe nur nicht, dass da jemals ein Wert zurückgegeben wird :gruebel:

user profile iconKickerkalle hat folgendes geschrieben Zum zitierten Posting springen:
Was passiert zum Beispiel, wenn das ds keine Zeile enthält? vZeile dann = -1?
Wenn ds keine Zeilen enthält, wird die Schleife nie durchlaufen und die Variablen bleiben alle unverändert.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Kickerkalle Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mi 02.03.16 23:19 
Danke für die schnelle Antwort. Ja, Entschuldigung es handelt sich um Visual Basic. Ich dachte vom Code her, ist es das gleiche wie C#. Also dafür nochmal sorry.
Beim Abtippen hatte ich einen kleinen Fehler drin, sorry!!!
Die Function heißt nicht vZeile (), sondern Wwert()

Also ich hatte beim Code lesen folgenden Anfänger Ansatz:
Vwert = 0, while Schleife beginnt also zu laufen, sobald im ds eine Zeile verfügbar ist, richtig? Gehen wir davon aus im ds ist eine Zeile okay?

Dann wenn im ds, in Spalte (Item) 0 der Wert = dem Wert in der Combobox ist, Vwert = 1 (wegen einer Zeile im ds) und damit auch Wwert = 1.
Nun erhöhe ich Vwert um 1, um aus der Schleife herauszukommen.

Zitat:
Ich sehe nur nicht, dass da jemals ein Wert zurückgegeben wird :gruebel:

Wenn ich dich richtig verstehe, dachte ich dass auch. Was passiert denn, wenn ich in einer anderen Sub schreibe vZeile() = -1? Zählt dann der Wert aus Vwert oder der Wwert?
Vor allem wenn das ds keine zeilen enthält, dann habe ich doch zwei Variablen oder? Einmal mit 0 und -1?
Genauso wenn der Wert im ds und der combox ungleich ist? Welche Variable zählt dann für vWert ()? also 0 für Vwert oder -1 für Wwert?

Oder ist die Variable Vwert nur dafür da, dass die Schleife beendet wird und Wwert ist die welche zählt am Ende!!

Vielen Dank für die Hilfe.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 03.03.16 00:08 
Ist schon sehr merkwürdig programmiert. Wofür ist die hier unbenutzte zeile Variable?

Vwert beginnt bei 0 und wird bei jeder Durchlauf der Schleife um eins erhöht.
Sobald du einen Treffer hast wird der aktuelle Index auf Vwert nach Wwert kopiert.
Das setzen von Vwert mit dem row count sorgt dafür die Schleife abgebrochen wird (Vwert ist ja nicht mehr kleiner als der row count).

Heißt am Ende steht in den Variablen bzw. der return Wert der Function(Wwert)

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
- bei leerer DataTable
     Vwert = 0
     Wwert = -1    
- bei Treffer
     Vwert = die Anzahl Rows+1 der DataTable 
     Wwert = der Index des Treffers.
- bei keinem Treffer
     Vwert = die Anzahl Rows+1 der DataTable 
     Wwert = -1
- bei leerem Dataset die keine Tabelle enthält oder bei einer nicht zugewiesenen ds Variablen 
     eine NullReferenceException


Sollte der Code aus einem Lehrbuch stammen würde ich über ein neues Buch nachdenken.

Zitat:
Was passiert denn, wenn ich in einer anderen Sub schreibe vZeile() = -1?


Du bekommst einen Compilerfehler wenn deine Behauptung stimmt das die Methode Wwert heißt und nicht vZeile. Und 2.tens darf man eine Methode eh keinen Wert zuweisen.

Zitat:
Vor allem wenn das ds keine zeilen enthält, dann habe ich doch zwei Variablen oder? Einmal mit 0 und -1?


Wwert ist kein echte Variable es ist Platzhalter für den Return Wert der Methode auf diese Pseudovariable hast du außerhalb der Methode keine Zugriff du kannst nur die Methode aufrufen und damit diesen Wert bekommen. Zuweisen kannst du dem aber außerhalb nix. Warum Vwert scheinbar eine Klassenvariable und damit möglicherweise von woanders auslesbar ist kann man nicht beantworten dafür sieht man zuwenig vom Code. Für mich sollte VWert eine lokale Variable sein anstatt der zeile Variablen die nicht benutzt wird.

Solltest du tatsächlich C# lernen und nicht VB versuche nicht diesen dämlichen VB Syntax zu verstehen. Ja beides benutzt das selbe Framework und die Verwendung des .Net Frameworks kann man sich auch in der jeweils anderen Sprache ansehen aber der VB.Net Syntax ist als Kompatibilitätschicht zu VB (ohne .Net Framework) geschrieben. Diese Schicht verschleiert mehr als sie verdeutlicht. Es stört nur beim neu lernen und ist möglicherweise nur hilfreich für alte VB Recken.
Kickerkalle Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 03.03.16 23:22 
Danke für die schnelle und gute Antwort. Soweit verstanden wie es geht.
Vielen Dank nochmal dafür.