2013-05-07 6 views
7

Sto cercando di capire come convertire il seguente codice di esempio in C# usando la stessa definizione implicita di VB. So che posso definire il pulsante e il controllo generico come due oggetti e farlo funzionare, ma mi piacerebbe usare la stessa variabile "ctlHTML" in C# proprio come funziona VB. Qualcuno può aiutarci?Come posso far funzionare questo codice VB in C# usando la stessa variabile?

Sub MySub(varInput As String, pnl As Panel) 
    Dim ctlHTML = Nothing 
    Select Case varInput 
     Case "btn" 
      ctlHTML = New HtmlButton 
     Case "lbl" 
      ctlHTML = New HtmlGenericControl() 
    End Select 
    With ctlHTML 
     .Style.Add("font-size", "14px") 
    End With 
    pnl.Controls.Add(ctlHTML) 
End Sub 

risposta

4

Non è possibile convertire il codice direttamente. Dovrai dare alla tua variabile un tipo. La classe più alta della catena di ereditarietà che supporta tutti i membri sarebbe HtmlControl:

HtmlControl control = null; 
switch(varInput) 
{ 
    case "btn": 
     control = new HtmlButton(); 
     break; 
    case "lbl": 
     control = new HtmlGenericControl(); 
     break; 
} 

if(control != null) 
{ 
    control.Style.Add("font-size", "14px"); 
    pnl.Controls.Add(control); 
} 
+0

Se solo due casi, userei l'espressione ternaria e perdere l'interruttore. – SimpleVar

+1

@YoryeNathan - Non ho intenzione di fare ipotesi sul codice attuale. Questo potrebbe essere solo un esempio. Se l'OP vuole fare ottimizzazioni, possono essere fatte in seguito. –

+1

Non ha suggerito una modifica nella risposta, ma ha fornito informazioni aggiuntive che potrebbero essere utili all'OP, oltre alla risposta. – SimpleVar

4

Al fine di modificare la proprietà Style, il controllo al minimo deve essere un HtmlControl. Quindi devi dichiarare la variabile ctlHtml come quel tipo.

È inoltre necessario verificare che lo ctlHtml sia inizializzato correttamente.

credo che il codice dovrebbe essere simile a questo:

public void MySub(string varInput, Panel pnl) 
{ 
    HtmlControl ctlHtml; 
    switch(varInput) 
    { 
     case "btn": 
      ctlHtml = new HtmlButton(); 
      break; 
     case "lbl": 
      ctlHtml = new HtmlGenericControl(); 
      break; 
     default: 
      ctlHtml = null; 
      break; 
    } 
    if (ctlHtml != null) 
    { 
     ctlHtml.Style.Add("font-size", "14px"); 
     pnl.Controls.Add(ctlHtml); 
    } 
} 
Problemi correlati