2014-05-09 22 views
1

基本上,我想通過「東西」給一個函數,然後在函數中找出它是什麼,並添加按照轉換傳遞的對象弄成

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

項目希望的代碼會解釋比我更好。我只是想知道是否有可能。

+0

你的問題是什麼? 雖然你的代碼看起來不錯。 –

+0

@Rraham完美地回答了它。我主要忽略了「(DropDownList)o」部分的括號!謝謝 –

回答

4

有很多不同的解決方案。首先,你正在做的事情實際上可能會起作用,但這絕對是錯誤的做法。

您可以:

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

使用泛型類?想不出一個通過泛型來做這個事情的例子,它會比使用重載更好/更快,但這絕對有可能。

+0

非常感謝。我經常忽略超載,認爲它們更加流程密集。那麼情況並非如此? –

+1

沒問題。這可能比使用案例要少,但無論如何,性能差異都很小。 – CodingIntrigue

+0

再次感謝你! –