c# - 将传递的对象转换为某种东西

标签 c# asp.net .net

基本上我想将“某物”传递给一个函数,然后在函数中找出它是什么并根据它添加一个项目

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);

使用通用类?想不出比使用重载更好/更快的通过泛型执行此操作的示例,但这绝对有可能。

关于c# - 将传递的对象转换为某种东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23564226/

相关文章:

c# - 在 C# 中仅打开一次 Windows 窗体

asp.net - 模拟WCF

.net - 为数据网格中的每一行添加删除按钮

.net - 各种 .NET 依赖注入(inject)框架的比较(优缺点)

c# - 在 Silverlight 4 中使用 ComAutomationFactory 遍历 Word 文档字段

c# - LINQ 选择格式化值作为列表

c# - 如何将 '\' 更改为 '/'

c# - 如何验证批量插入中的数据

c# - 动态设置 LINQ 数据源导致运算符 '==' 与操作数类型 'String' 和 'Int32' 不兼容

c# - 从客户端应用程序上传的 Azure 媒体服务/blob 存储