Así que estoy aprendiendo C#, y encontré algo que me parece extraño ... Estoy jugando con delegados y he creado un delegado DelegateReturnsInt. Ahora, Cuando utilizo un bucle foreach, el libro muestra a utilizar de esta manera:¿Cómo se proyecta Foreach sin anulaciones explícitas/implícitas?
foreach(DelegateReturnsInt del in theDelegate.getInvocationList())
ahora sé que getInvocationList() devuelve una matriz de Delegado [], pero ¿cómo convertirlos a DelegateReturnsInt? Lo pregunto porque quería simplemente jugar y cambiarlo de un foreach para un bucle, así que creé este
Delegate[] del = theDelegate.GetInvocationList();
for(int i = 0; i < del.Length; i++){
int result = del[i]();
pero eso no veo del [i] como método. He intentado convertir a DelegateReturnsInt y tal, pero me da errores de tipo de conversión sobre no tenerlo definido.
Mi gran pregunta es ¿por qué Foreach() es tan especial?
Delegado [] del = theDelegate.GetInvocationList(); para (int i = 0; i
Nicholas
https://connect.microsoft.com/VisualStudio/feedback/details/530748/new-fxcop-rule-for-net2-on-foreach-in-non-generic-ienumerable – Guillaume
Sí exactamente, hay un elenco "invisible" o "implícito" presente en un 'foreach' (excepto si usa' var' en el 'foreach' que realmente recomiendo). Este envío es invisible, pero funciona con conversiones de tipo implícito y conversiones de tipo explícito. Por ejemplo, la conversión de referencia del tipo base "Delegar" al tipo derivado "DelegateReturnsInt" (un downcast) es una conversión _explicit reference_ en la terminología C#. Por lo tanto, el elenco "invisible" también funciona para conversiones explícitas (puede arrojar 'InvalidCastException' en tiempo de ejecución o curso). –