2013-05-07 25 views
7

我想弄清楚如何將下面的示例代碼轉換爲C#,使用與VB相同的隱式定義。我知道我可以將按鈕和泛型控件定義爲兩個對象並使其工作,但我想在C#中使用與VB一樣的變量「ctlHTML」。有人可以幫忙嗎?如何使這個VB代碼在C#中使用相同的變量?

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

如果只有兩種情況,我會用三元表達而失去的開關。 – SimpleVar 2013-05-07 23:45:36

+1

@YoryeNathan - 我不會對實際的代碼做任何假設。這隻能是一個例子。如果OP想要進行優化,可以稍後完成。 – 2013-05-07 23:47:33

+1

沒有在答案中提出改變,只是提供了可能對OP有幫助的額外信息,除了答案。 – SimpleVar 2013-05-08 00:23:40

4

爲了修改Style財產,以最低控制需要是HtmlControl。所以你需要聲明變量ctlHtml這種類型。

您還應該檢查以確保ctlHtml已正確初始化。

我相信你的代碼應該是這個樣子:

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); 
    } 
} 
相關問題