Vb to c#

di il
2 risposte

Vb to c#

Salve a tutti,
scrivo in VB da sempre, e talvolta ho problemi a "ragionare" in c#...
ora ad esempio ho un problema a "tradurre" il mio pensiero da VB a c#..
in VB posso scrivere un event handler delegato a gestire piu' controlli, tipo

 Private Sub tStripButtons_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tStripButEnd.Click, tStripButSave.Click, .....

        If CType(sender, ToolStripButton).Enabled Then
            Select Case True
                Case CType(sender, ToolStripButton) Is Me.tStripButEnd
                    Me.Close()
                Case CType(sender, ToolStripButton) Is Me.tStripButSave
                    SaveData()
                Case ....
            End Select
        End If

    End Sub
dove all'interno dell'evento verifico QUALE button sia stato premuto....

ho provato in c# a scrivere

private void tStripButtons_Click(object sender, EventArgs e)
{

    ToolStripButton button = sender as ToolStripButton;
    if (button != null && button.Enabled && button.Visible)
    {
        switch (true) 
        {
            case (button == this.tStripButXXX):     // errato per "a costant value is expected"
                break;

            case (button is this.tStripButXXX):     // errato per "a costant value is expected"
                break;

            case (sender as ToolStripButton == this.tStripButXXXX): // errato per "a costant value is expected"
                break;

        }
    }
}

e non mi e' affatto chiaro il problema di "a costant value is expected"...
il converter on line di Telerik converte vb in

    ...
    switch (true)
    {
        case object _ when (ToolStripButton)sender == this.tStripButEnd:
            {
                this.Close();
                break;
            }

        case .....
ma questo lo capisco ancora meno, anche se funziona... qualcuno e' di grazie cosi' gentile da spiegarmelo o indicarmi dove trovare informazioni?
grazie e saluti omnia
--
Andrea

2 Risposte

  • Re: Vb to c#

    A mio avviso, se stai scrivendo un codice in uno specifico linguaggio, che sia C# o qualunque altro, è fondamentale conoscerne la sintassi per poter programmare fluentemente, senza affidarsi a convertitori di codice online, a meno di non utilizzarli per una conversione massiva di codice che poi lo sviluppatore deve necessariamente saper comprendere.

    Le informazioni che stai cercando sono pubblicamente accessibili nella documentazione Microsoft del linguaggio; ad esempio, trovi qui la guida che spiega il funzionamento del costrutto switch.

    Quando hai determinato lo scopo da raggiungere o quello che materialmente c'è da fare, è sufficiente scriverlo seguendo le regole del linguaggio e le indicazioni della guida.

    Ciao!
  • Re: Vb to c#

    Salve Marco,
    non replico la premessa... ho chiesto proprio perche' mi piace imparare qualche cosa per me nuovo...
    il convertitore Telerik l'ho guardato perche' NON riesco a "tradurre" in un linguaggio diverso da quello "mio abituale" un determinato costrutto.
    se, leggendo la conversione, avessi capito il contesto, avrei "imparato" qualche cosa... ma non e' questo il caso .

    detto questo, anche guardando la sinossi del costrutto switch, non riesco a capire "come mai" il confronto booleano
    case (button == this.tStripButXXX): // errato per "a costant value is expected"
    non soddisfi le condizioni come nel costrutto SELECT CASE di VB; "a costant value is expected" non mi e' affatto chiara come eccezione sollevata.
    questo per il "mio" codice.

    per il codice di Telerik, invece, sto ancora cercando il significato dell'underscore "_" nell'espressione
    case object _ when (ToolStripButton)sender == this.tStripButEnd:
    non ho ancora trovato riferimenti in rete...

    comprendo che il pattern matching di switch sia diverso da SELECT CASE, ma non riesco per comprendere il significato...
    tendenzialmente
    case (ToolStripButton)sender == this.tStripButEnd:
    dovrebbe essere sufficiente, ma a quanto pare mi manca la comprensione di tutta la parte precedente. il "when" aggiunto risulta una seconda condizione addizionale (che poi e' quella a me interessante), ma di nuovo, "perche' e cos'e'" [case object _ ]

    hai la grazia di indirizzarmi da qualche parte, perche' un confronto di questo tipo nella sinossi e nella language specification?
    grazie e saluti omnia

    [EDIT]
    come non detto... trovato... espresso in maniera alla mia bassezza...
    https://spin.atomicobject.com/2018/01/11/csharp-pattern-matching-7-0/

    case object _ when (ToolStripButton)sender == this.tStripButEnd:

    viene risolto come (semanticamente in mio_finto_pseudocodice)

    case { cast_di_type( in questo caso object) nomeIstanza "_" | when (epressione booleana) }
    che mi pare un "arzigotolo" in quanto
    case { cast_di_type( in questo caso object) nomeIstanza "_" | when ((ToolStripButton)sender == this.tStripButEnd) }
    diventa la parte rilevante di questa particolare espressione ...
    complicato
    grazie comunque
    [/EDIT]
    --
    Andrea
Devi accedere o registrarti per scrivere nel forum
2 risposte