2013-05-07 13 views
7

私はVBと同じ暗黙的な定義を使用して、次のサンプルコードをC#に変換する方法を理解しようとしています。私はボタンとジェネリックコントロールを2つのオブジェクトとして定義して動作させることができますが、VBのようにC#で同じ変数 "ctlHTML"を使用したいと思います。誰かがこれを助けることができますか?どのように私は同じ変数を使用してC#でこのVBコードを動作させることができますか?

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 

答えて

4

コードを直接変換することはできません。変数に型を与える必要があります。あなたのメンバーのすべてをサポートし、継承チェーンのクラス最高の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

のみ2例ならば、私は三式を使用してスイッチを失うことになります。 – SimpleVar

+1

@ YoryeNathan - 私は実際のコードについて何も仮定しません。これは一例にすぎません。 OPが最適化を行いたい場合は、後で実行することができます。 –

+1

答えに変更を提案しませんでした。あなたの答えに加えて、OPに役立つかもしれない追加の情報を提供しました。 – SimpleVar

4

Styleプロパティを変更するためには、最低でも制御がHtmlControlする必要があります。したがって、変数ctlHtmlをその型として宣言する必要があります。

また、ctlHtmlが適切に初期化されていることを確認する必要があります。

は、私はあなたのコードは次のようになるはずと信じて:両方が HtmlControlから継承

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); 
    } 
} 
関連する問題