2014-05-09 3 views
1

Fondamentalement je voulais passer « quelque chose » à une fonction, puis dans la fonction savoir ce qu'il était et ajouter un élément selonConvertir objet passé en quelque chose

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

Espérons que le code expliquera mieux que moi . Je me demandais juste si c'était possible.

+0

Quelle est votre question? Votre code semble être bon. –

+0

@RGraham a parfaitement répondu. Il me manquait les parenthèses autour de la partie "(DropDownList) o" la plupart du temps! Merci bien –

Répondre

4

Il existe de nombreuses solutions différentes. Premièrement, ce que vous faites fonctionnera probablement, mais c'est certainement la mauvaise façon de procéder.

Vous pouvez:

Utilisez le mot-clé 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)); 
    } 
} 

Utilisez les surcharges:

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

Utilisez une classe générique? Ne peut pas penser à un exemple de faire cela via des génériques qui serait mieux/plus rapide que d'utiliser des surcharges, mais c'est tout à fait possible.

+0

Merci beaucoup. J'évite souvent les surcharges en pensant qu'elles nécessitent plus de processus. Ce n'est pas le cas alors? –

+1

Pas de problème. C'est probablement moins intensif que d'utiliser un boîtier, mais dans tous les cas, la différence de performance serait minime. – CodingIntrigue

+0

merci encore une fois! –

Questions connexes