warnung beim "== null"



  • hi

    ich möchte überprüfen ob der wert des numericUpDown1 0 ist und ob der wert existiert.

    habs so versucht:

    if (numericUpDown1.Value == 0 || numericUpDown1.Value == null)
    

    bekomme dann ne warnung:
    Warnung 1 Das Ergebnis des Ausdrucks ist immer "false", da ein Wert vom Typ "decimal" niemals NULL vom Typ "decimal?" ist.

    wie müsste es korrekt heissen?



  • if (numericUpDown1.Value == 0)
    

    Allerdings bin ich mir jetzt nicht sicher, ob ein Decimal das gleiche Problem wie ein float haben kann, also ggf. nie exakt 0 ist.



  • Es geht wohl eher darum, dass 'Decimal' eine struct und keine Klasse ist, also
    der Vergleich auf null ist falsch, nicht der mit 0.



  • ja ist ja klar dass der fehler beim null liegt und nicht beim 0, steht ja auch im thread-titel aber wie müsste es korrekt heissen?



  • Was willst Du wissen ?! Schreibs mal so, das man weiß was Du überhaupt willst.



  • guest1 schrieb:

    ja ist ja klar dass der fehler beim null liegt und nicht beim 0, steht ja auch im thread-titel aber wie müsste es korrekt heissen?

    Hab ich doch gesagt: Decimal ist ein struct, also ist der Test auf null unsinn.



  • Noch deutlicher ausgedrückt: Ein Decimal kann nicht nichts sein.



  • @Knuddlbaer hab doch beschrieben was ich möchte ...

    guest1 schrieb:

    ich möchte überprüfen ob der wert des numericUpDown1 0 ist und ob der wert existiert.

    @Jockelx ich möchte bei der if-abfrage feststellen dass das text-feld nicht leer gelassen wird. deshalb auch das mit dem "null". wenn ich stattdessen nur if (numericUpDown1.Value == 0) eingebe, wird ja nur auf die zahl "0" geachtet.



  • Du weißt nur nicht was Du willst.

    Value ist ein Decimal und der ist immer vorhanden.
    Die Eigenschaft Text liefert Dir das was in der Textbox steht. Das kann null ein. Aber der Vergleich auf null ist unsinn, weil die Eingabe auch String.Empty sein kann. (Wenn, dann nimm dafür string.IsNullOrEmpty)

    Text Infrastruktur. Ruft den im NumericUpDown-Steuerelement anzuzeigenden Text ab oder legt diesen fest. (Von NumericUpDown geerbt.)

    Value Ruft den dem Drehfeld (auch als Auf-Ab-Steuerelement bezeichnet) zugewiesenen Wert ab oder legt diesen fest. (Von NumericUpDown geerbt.)



  • hmm ich habs jetzt mit if (string.IsNullOrEmpty) probiert und bekomme diese meldung:
    Fehler 1 Die Methodengruppe "IsNullOrEmpty" kann nicht in den Nichtdelegattyp "bool" konvertiert werden. Wollten Sie die Methode aufrufen?

    Wemm ich dann auf Ja klicke, funktioniert alles so wie ich es möchte ... aber warum wird es als fehler eingesehen?



  • Hallo

    Du musst der Funktion string.ISNullOrEmpty(hier) natürlich den string übergeben, den du testen willst. Du solltest dich wirklich mit den Grundlagen vertraut machen und dir auch mal selber Lösungen suchen. Guter Anlaufpunkt: MSDN.

    chrische



  • also meinst du das jetzt so?

    if (string.IsNullOrEmpty(numericUpDown1))
    

    ja ich bin momentan die grundlagen am lernen aber ist halt nicht so einfach das zu finden wonach man gerade sucht.



  • @Jockelx ich möchte bei der if-abfrage feststellen dass das text-feld nicht leer gelassen wird. deshalb auch das mit dem "null". wenn ich stattdessen nur if (numericUpDown1.Value == 0) eingebe, wird ja nur auf die zahl "0" geachtet.[/quote]

    Wie meinst du Leer gelassen?? Ich verstehe nicht ganz deine Problematik?
    Soviel ich weiß, muss ein NumericUpDown einen Wert besitzen! Wird z.B die Zahl Null weggelöscht, wird sie nur im NumericUpDown gelöscht und nicht im Hintergurnd. Dass heißt, du siehst die Null zwar nicht mehr jedoch ist dem Computer sehr wohl bekannt auf welchem Wert das NumericUpDown stehen geblieben ist!
    Teste es mal mit diesem Code:

    string test = "";
    
                test=Convert.ToString(numericUpDown1.Value);
                if (test == " ")
                {
                    MessageBox.Show("Keine Zahl vorhanden");
    
                }
                else
                {
                    MessageBox.Show(test);
                }
    


  • @guest1:
    Also, es gibt eine Funktion string.IsNullOrEmpty(xxx), die ermittelt, ob der übergebene String xxx leer ist. Die Klasse NumericUpDown hat zwei für Dich wichtige Eigenschaften, Text und Value. Text ist der String (!), der in dem Textfeld steht, Value ist der numerische (!) Wert, der in dem Control eingestellt ist. Wenn Du nun wissen möchtest, ob das Control überhaupt einen Text enthält, musst Du zunächst prüfen, ob der Text leer ist.

    Aber die Verknüpfung dieser Informationen zu einer dreizeiligen Überprüfung muss ich jetzt einfach Dir überlassen 🙂



  • Hallo

    guest1 schrieb:

    also meinst du das jetzt so?

    if (string.IsNullOrEmpty(numericUpDown1))
    

    ja ich bin momentan die grundlagen am lernen aber ist halt nicht so einfach das zu finden wonach man gerade sucht.

    Ist numericUpDow1 ein string? Wenn du das nicht weißt, kann ich dir wieder nur MSDN empfehlen. Du musst anfangen Code selber zu pflegen udn Compilerfehler zu beheben ohne immer gleich zu verzeweifeln. Das ist wirklich nicht arrogant gemeint, aber hättest du deinen Code mal probiert, so hättest du eine entspechende Fehlermeldung bekommen.

    chrische



  • Ich kann zwar kein C#, aber ich denke, er will sowas:

    if (numericUpDown1 != null && numericUpDown1.Value == 0)
    


  • Tachyon schrieb:

    Ich kann zwar kein C#, aber ich denke, er will sowas:

    if (numericUpDown1 != null && numericUpDown1.Value == 0)
    

    Unwahrscheinlich. Controls verschwinden normalerweise nicht vom Formular 🙂



  • LordJaxom_lg schrieb:

    Tachyon schrieb:

    Ich kann zwar kein C#, aber ich denke, er will sowas:

    if (numericUpDown1 != null && numericUpDown1.Value == 0)
    

    Unwahrscheinlich. Controls verschwinden normalerweise nicht vom Formular 🙂

    Jo, da ist was dran...


Log in to reply