Frage zu LINQ
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.
-
-
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! -
-
ich täte IsNumeric zu die böse Funktionen zählen.
Double.TryParse ist präziser, und testet nicht nur, sondern erzielt im Erfolgsfall auch gleich Ergebnis.
ungetestet
Ooh - geht nichDieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
@ErfinderDesRades:
Kann es sein, dass Du den Eröffnungspost nicht gelesen hastFalls 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! -
-
@Rod: doch, aber hast du meinen Post gelesen?
Ich wende ein, dass IsNumeric eine böse Funktion ist, die erzwingt, dass der String zweimal analysiert wird, während prinzipiell möglich ist, mit nur einer Operation auszukommen.
Das Problem ist interessant, denn es scheint, dasses mit Linq nicht so geht, wie ich mir das vorstelle.
Meine Tests, was geht und was nicht:VB.NET-Quellcode
- Public Class Form1
- Dim dbl As Double
- Private Sub TestToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles TestToolStripMenuItem.Click
- TextBox3.Text = SumTexts({TextBox1.Text, TextBox2.Text}).ToString 'korrekt
- TextBox3.Text = SumTexts3({TextBox1.Text, TextBox2.Text}).ToString
- End Sub
- Private Function SumTexts(ByVal txts As String()) As Double
- 'korrekt, aber inakzeptabel wg. eiglich unnötige Klassenvariable
- Return (From txt In txts Where Double.TryParse(txt, dbl) Select dbl).Sum
- End Function
- Private Function SumTexts2(ByVal txts As String()) As Double
- Dim dbl As Double
- Return (From txt In txts Where Double.TryParse(txt, dbl) Select dbl).Sum 'Sytax-Fehler
- End Function
- Private Function SumTexts3(ByVal txts As String()) As Double
- 'falsches Ergebnis
- Return (From txt In txts Let dbl = New Double Where Double.TryParse(txt, dbl) Select dbl).Sum
- End Function
- End Class
Bei SumTexts2() scheint mir ein Compiler-Bug vorzuliegen, denn nach meinem Verständnis müsste die Syntax korrekt sein, und ebenso funktionieren wie in SumTexts()
FloFuchs schrieb:
btw.. IsNumeric feht in der Liste von SeriToolsDieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()
-
-
Diesen Fehler hatte ich auch. Ich hatte an eine Befehlserwweiterung gedacht, bin da auch nicht froh geworden.
Hab ne kleine Funktion danebengeschrieben:
VB.NET-Quellcode
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- TextBox4.Text = (From txt In {TextBox3.Text, TextBox4.Text} _
- Where MyTryParse(txt) _
- Select CDbl(txt)).ToArray.Sum.ToString
- End Sub
- Private Shared Function MyTryParse(txt As String) As Boolean
- Dim dbl As Double
- Return Double.TryParse(txt, dbl)
- End Function
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!Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()
-
ich hab das jetzt als Bug reportet.
Da könnt ihr voten (wenn ihr mit dieser bescheuerten Feedback-Site zurechtkommt) - dann behandeln die das mit höherer Dringlichkeit.
connect.microsoft.com/VisualSt…lem-with-tryparse-in-linq -
Das ist echt näckisch, leider hab ich von LINQ nicht genug Ahnung.
Jedenfalls kommt bei
Die Bereichsvariable "dbl" verbirgt eine Variable in einem einschließenden Block oder eine zuvor im Abfrageausdruck definierte Bereichsvariable.
in der C#-Version
Der Typ des Ausdrucks in der select-Klausel ist falsch. Fehler beim Typrückschluss im Aufruf von "Select".
und noch etwas mehr.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! -
doch - c# kann das:
Quellcode
-
-
Siehe mein Post#9, mach Dir eine separate Function.
@EDR: Ähnliches hatte ich schon mal mit Befehlserweiterung.
Noch ein Grund, auf C# umzusteigen.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! -
-
Ähnliche Themen
-
SwisSeRy - - Sonstige Problemstellungen
-
3 Benutzer haben hier geschrieben
- RodFromGermany (5)
- ErfinderDesRades (5)
- Gast (5)