如何使用相同的变量使此VB代码在C#中工作?

如何使用相同的变量使此VB代码在C#中工作?,c#,vb.net,vb.net-to-c#,C#,Vb.net,Vb.net To C#,我试图弄清楚如何使用与VB相同的隐式定义将以下示例代码转换为C#。我知道我可以将button和generic控件定义为两个对象并使其工作,但我希望在C#中使用相同的变量“ctlHTML”,就像VB工作一样。有人能帮忙吗 Sub MySub(varInput As String, pnl As Panel) Dim ctlHTML = Nothing Select Case varInput Case "btn" ctlHTML = New

我试图弄清楚如何使用与VB相同的隐式定义将以下示例代码转换为C#。我知道我可以将button和generic控件定义为两个对象并使其工作,但我希望在C#中使用相同的变量“ctlHTML”,就像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

您将无法直接转换代码。您必须为变量指定一个类型。继承链中支持所有成员的最高类是
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);
}

要修改
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);
    }
}

由于
HtmlGenericControl
HtmlButton
都继承自
HtmlControl
,因此可以将ctlHTML声明为该类型(
HtmlControl
),它将起作用


请参见此处:

如果只有两种情况,我将使用三元表达式并失去开关。@YoryeNathan-我不会对实际代码做任何假设。这只能是一个例子。如果OP想要进行优化,可以稍后再进行。没有建议对答案进行更改,只是在您的答案之外提供了可能对OP有帮助的额外信息。谢谢。不知何故,我忽略了HtmlControl。