Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026

    Passaggio di parametro nullo o vuto in C#

    Salve.
    Vorrei sapere se è possibile passare un parametro vuoto cioè:
    codice:
                double b=0;
                double op1 = 0;
                op1 = Convert.ToDouble(op1Txt.Text);
                ClassOperazioni sommatoria = new ClassOperazioni(op1,b);
    e
    codice:
     public ClassOperazioni(double a, double b)
            {
                som0 = a; som1 = b;
               
            }
    Cioè assegnare alla variabile 'b' al posto di zero un valore nullo in modo che posso passare correttamente i parametri e che poi in una seconda istanza lo popolo con un valore che voglio, in questo caso un valore di tipo duoble.

  2. #2

    Re: Passaggio di parametro nullo o vuto in C#

    Guardati i tipi NULLABLE su MSDN

  3. #3
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Grazie dell'informazione sspintux.
    Mi sono letto i tipi NULLABLE e sono riuscito a far passare un solo parametro sui due che ho inserito.
    Sapresti invece indicarmi come posso mettere un controllo tipo if negli eventi del main in modo che un determinato metodo è stato chiamato invece che un'altro e quindi ho un tipo di output invece che un'altro. Ad esempio:
    codice:
    ClassOperazioni sommatoria2 = new ClassOperazioni(m, op2);
    ClassOperazioni sottrazione2 = new ClassOperazioni(m, op2);
    
                if (sommatoria2.Somma() == null)
                    op1Txt.Text = Convert.ToString(sommatoria2.Somma());
    
                if (sottrazione2.Sottrai() == null)
                    op1Txt.Text = Convert.ToString(sottrazione2.Sottrai());
    codice:
     public double Somma()
            {
                double somma =(Somma1() + Somma2());
                return somma;
            }
     public double Sottrai()
            {
                double sottrazione = (Sottrai1()-Sottrai2());
                return sottrazione;
            }
    Ho provato come sopra ma non riesco a capire bene e mi dà dei problemi a livello di output
    Grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Scusami Ironmax ma faccio veramente fatica a capire il senso delle tue domande.

    Cioè assegnare alla variabile 'b' al posto di zero un valore nullo in modo che posso passare correttamente i parametri
    e che poi in una seconda istanza lo popolo con un valore che voglio...
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Ciao sspintux.
    Falso allarme, non riesco a dare un valore nullo al parametro anche perchè quando lo passo mi dice che 'null' non può essere convertito in double, poi mi da una eccezione del tipo InvalidOperationException non è gestita e che l'oggetto nullabile deve avere un valore.
    Qua sotto riporto parte del codice:
    codice:
                    double? b=null; 
                    double m = (double)b;
                    double op1;
                    op1 = Convert.ToDouble(op1Txt.Text);
                    ClassOperazioni sommatoria = new ClassOperazioni(op1, m);
                    op1Txt.Text = Convert.ToString(sommatoria.Somma1());
    Praticamente il passaggio parametri non accetta come argomento 'null'.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    :master:
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    Originariamente inviato da Ironmax
    ....
    Qua sotto riporto parte del codice:
    codice:
                    double? b=null; 
                    double m = (double)b; '***
                    ....
    è ovvio che la riga '**** ti dia errore. Non puoi convertire un null in double!
    esiste la proprietà HasValue per determinare se un NUllable ha un valore.

    Per il resto....mi sono perso

  8. #8
    Per inciso, in alcune circostanze può essere più chiaro ricorrere, invece che ai tipi nullable, ad un nuovo overload della funzione privo del parametro in questione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di Ironmax
    Registrato dal
    Dec 2008
    Messaggi
    1,026
    Questo è il codice del main e della classe:
    codice:
     private void btnSomma_Click(object sender, EventArgs e)
            {
                    double? b=5;    // Questo b gli viene assegnato il valore 5 e non null
                    double op1;
                    op1 = Convert.ToDouble(op1Txt.Text);
                    ClassOperazioni sommatoria = new ClassOperazioni(op1, b);
            }
    codice:
    ...
    public ClassOperazioni(double a, double b)
            {
                som0 = a; som1 = b; 
                sot0 = a; sot1 = b;
             }
            public double Somma1()
            {
                double s1 = som0;
                return s1;
            }
            public double Somma2()
            {
                double s2 = som1;
                return s2;
            }
    
            public double Somma()
            {
                double somma =(Somma1() + Somma2());
                return somma;
            }
    Come si vede passo il valore 5 è quindi un errore perchè vorrei passare 'null' cioè far finta che passa un parametro però senza assegnare alcun valore cosi il costruttore sente il passaggio di due parametri, ma se metto 'null' quando instanzio l'oggetto e tenta di far passare i parmetri il debug mi blocca perchè il costruttore accetta solo parametri di tipo double.
    E' Questo il tipo di passaggio che vorrei fare cioè passarne due parametri ma uno che non abbia valore, fittizio.
    Oppure fare un overload come suggerito da MItaly, però non l'ho mai fatto e non saprei come fare, qualcuno sa darmi una dritta sul overload?

  10. #10
    Originariamente inviato da Ironmax
    ....
    Oppure fare un overload come suggerito da MItaly, però non l'ho mai fatto e non saprei come fare, qualcuno sa darmi una dritta sul overload?
    l'overload consiste nel dichiarare più volte lo stesso nome di funzione (o costruttore)
    ma con firme diverse, ovvero con parametri diversi per numero e/o tipo
    in modo che il compilatore abbia modo di riconoscere in base alla chiamata
    "quale versione" della funzione usare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.