2013-05-07 7 views
7

Ich versuche herauszufinden, wie Sie den folgenden Beispielcode in C# konvertieren, indem Sie dieselbe implizite Definition wie VB verwenden. Ich weiß, dass ich die Schaltfläche und das generische Steuerelement als zwei Objekte definieren kann und es funktionieren lässt, aber ich würde gerne die gleiche Variable "ctlHTML" in C# verwenden, genau wie VB funktioniert. Kann mir jemand helfen?Wie kann ich diesen VB-Code in C# mit der gleichen Variablen arbeiten lassen?

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 

Antwort

4

Sie können den Code nicht direkt konvertieren. Sie müssen Ihrer Variablen einen Typ geben. Die Klasse höchste in der Vererbungskette, die HtmlControl alle Ihre Mitglieder unterstützt würde:

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

Wenn nur zwei Fälle würde ich ternären Ausdruck verwenden und den Schalter verlieren. – SimpleVar

+1

@YoryeNathan - Ich werde keine Annahmen über den tatsächlichen Code machen. Dies könnte nur ein Beispiel sein. Wenn das OP Optimierungen vornehmen möchte, können diese später durchgeführt werden. –

+1

schlug keine Änderung in der Antwort vor, nur zusätzliche Informationen, die für das OP, zusätzlich zu Ihrer Antwort hilfreich sein könnte. – SimpleVar

4

Um die Style Eigenschaft zu ändern, muss die Steuerung auf mindestens eine HtmlControl sein. Also müssen Sie die Variable ctlHtml als diesen Typ deklarieren.

Sie sollten auch überprüfen, ob die ctlHtml richtig initialisiert ist.

Ich glaube, Ihr Code wie folgt aussehen sollte:

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); 
    } 
} 
Verwandte Themen