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 に答える