ArrayList x=new ArrayList(); x.Add(10); x.Add("SS"); foreach(string s in x) { } Does it mean that when foreach is run it tries to cast element of array list to type in foreach expression?
3 Réponses :
Oui, si un élément n'est pas convertible au type, vous obtiendrez un essentiellement, c'est équivalent à: p> invalidalcastexception code>. Dans votre cas, vous ne pouvez pas lancer Boxed
int code> à
chaîne code> provoquant une exception à lancer.
Oui, bien sûr, lorsque vous exécutez cette boucle et que vous le jetez, le compilateur essaiera de la jeter au type spécifié, qui dans votre cas, il s'agira de chaîne. Et si cela ne peut pas le faire, cela augmentera une erreur invalide. p>
Selon c # Spécification de Déclaration foreach, votre code est équivalent à
ArrayList x=new ArrayList(); x.Add(10); x.Add("SS"); IEnumerator enumerator = (x).GetEnumerator(); try { while (enumerator.MoveNext()) { string element = (string)enumerator.Current; // here is casting occures // loop body; } } finally { IDisposable disposable = enumerator as System.IDisposable; if (disposable != null) disposable.Dispose(); }
Je sais ce que ça fait, tout simplement pas sûr s'il y a eu une coulée interne de l'objet à un type spécifié.
Malheureusement,
foreach code> fait implicitement les éléments du type spécifié pour la variable de boucle même si la distribution est normalement explicite. Une des choses laides que nous avons héritées des temps des pré-génériques.