将传递的对象转换为某物

本文关键字:转换 对象 | 更新日期: 2023-09-27 18:02:29

基本上,我想把"某物"传递给一个函数,然后在函数中找出它是什么并根据

添加一个项
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        var db = new Data.SQLDataContext();
        ddlSubject.DataSource = db.CONTACTSUBJECTs.Where(p => p.Live == true).OrderBy(p => p.Weight);
        ddlSubject.DataBind();
        //ddlSubject.Items.Insert(0, new ListItem("- Please select message subject -", "No subject given"));
        AddItem(ddlSubject, "- Please select message subject -", "No subject given", 0);
    }
}
protected void AddItem(object o, string t, string v, int i)
{
    var item = o.GetType().ToString();
    switch (item)
    {
        case "System.Web.UI.WebControls.DropDownList":
            (DropDownList) o.Items.Insert(i, new ListItem(t, v));
            break;
    }
}

希望代码能比我解释得更好。我只是想知道这是否可能。

将传递的对象转换为某物

有许多不同的解决方案。首先,你所做的实际上可能会起作用,但这绝对是错误的方法。

你可以:

使用is关键字:

protected void AddItem(object o, string t, string v, int i)
{
    if(o is DropDownList) {
        ((DropDownList) o).Items.Insert(i, new ListItem(t, v));
    }
}

使用过载:

protected void AddItem(DropDownList dropDown, string t, string v, int i) {
    dropDown.Items.Insert(i, new ListItem(t, v));
}
protected void AddItem(Label l, string t, string v, int i) { 
    l.Text = t + v + i;
}
AddItem(ddlSubject, "- Please select message subject -", "No subject given", 0);
AddItem(lblSubject, "Hello", "World", 15);

使用泛型类?

我想不出一个通过泛型比使用重载更好/更快的例子,但这绝对是可能的。