0

我创建了一个类,我想从组合框、复选框或文本框中返回选定的值。

代码如下所示:

private string GetControlValue(string controlId)
    {
        var control = FindControl(controlId);

        if (control.GetType() == typeof(RadTextBox))
        {
            return ((RadInputControl)control).Text;
        }
        else if (control.GetType() == typeof(RadComboBox))
        {
            return ((RadComboBox)control).SelectedValue;
        }
        else if (control.GetType() == typeof(CheckBox))
        {
            return ((CheckBox)control).Checked.ToString();
        }
        else
        {
            return null;
        }
    }

我可以以更有效的方式做到这一点吗?我想我的例子可能是对每种类型进行拳击,它会降低性能。

4

2 回答 2

3

您可以使用继承树来缩短代码:

private string GetControlValue(string controlId)
{
    var control = FindControl(controlId);
    if(control is ITextControl)
    {
        return ((ITextControl) control).Text; // works also for the RadComboBox since it returns the currently selected item's text
    }
    else if(control is ICheckBoxControl)
    {
        return ((ICheckBoxControl)control).Checked.ToString();
    }
    else
    {
        return null;
    }
}
于 2012-12-12T11:33:17.267 回答
1

您可以使用以下as关键字:

private string GetControlValue(string controlId)
{
    var control = FindControl(controlId);
    var radTextBox = control as RadTextBox;
    if (radTextBox != null)
    {
        return radTextBox.Text;
    }

    var radComboBox = control as RadComboBox;
    if (radComboBox != null)
    {
        return radComboBox.SelectedValue;
    }

    var checkBox = control as CheckBox;
    if (checkBox != null)
    {
        return checkBox.Checked.ToString();
    }

    return null;
}

顺便说一句:您的代码中没有发生拳击。

于 2012-12-12T11:20:00.160 回答