2010-11-26 18 views
0

J'essaie de transmettre une collection de contrôles Dropdown en tant que paramètre à une méthode qui prend une collection de type Control en entrée. Pendant l'exécution, j'obtiens l'erreur suivante:Erreur lors de l'envoi d'une collection dropdown à une méthode acceptant la collection de contrôles

"Impossible de lancer l'objet de type 'd__a3 1[System.Web.UI.WebControls.DropDownList]' to type 'System.Collections.Generic.IEnumerable 1 [System.Web.UI.Control]'."

Une idée de pourquoi je reçois ceci?

Mon code:

private void Caller() 
{ 
    IEnumerable<DropDownList> dropDownControlsInCurrentRow = currentRow.Controls.OfType<DropDownList>(); 
    SetControlsVisibility(dropDownControlsInCurrentRow, false); 
} 

private void SetControlsVisibility(IEnumerable<Control> controlCollection, bool visibilityFlag) 
{ 
    foreach (ctrl in controlCollection) { 
     ctrl.Visible = visibilityFlag; 
    } 
} 
+0

La méthode 'OfType' est-elle la vôtre ou celle du framework? Si c'est le vôtre, pourriez-vous mettre le code pour ça? Si c'est du framework, quel est le type de 'currentRow'? –

+0

^^ C'est la méthode d'extension IEnumerable (intégrée). currentRow est de type GridViewRow. – Dienekes

Répondre

1

utilisation

IEnumerable<Control> dropDownControlsInCurrentRow; 

au lieu de

IEnumerable<DropDownList> dropDownControlsInCurrentRow; 
+0

^^ J'ai accepté cela comme réponse, car il m'a donné la solution rapide et nécessaire. – Dienekes

1

En C# 4.0 le code ci-dessus fonctionnerait en raison de contravariance de T IEnumerable.

En C# 3.5 et au-dessous, vous devez ajouter un dropDownControlsInCurrentRow.Cast supplémentaire()

Voir ce lien pour plus d'infos on contravariance

+0

^^ ok, passerait par l'article dans la soirée .. – Dienekes