Как foreach приводит приведение без явных / неявных переопределений? - PullRequest
7 голосов
/ 13 августа 2010

Так что я только изучаю C # и наткнулся на что-то, что я нахожу странным ... Я играю с делегатами и создаю делегата DelegateReturnsInt .Теперь, когда я использую цикл foreach , книга показывает, что использовать его следующим образом:

foreach(DelegateReturnsInt del in theDelegate.getInvocationList())

, теперь я знаю, что getInvocationList () возвращает Array of Delegate [], но какон конвертирует их в DelegateReturnsInt ?Я спрашиваю, потому что я хотел просто поиграть и изменить его с foreach на цикл for, поэтому я создал этот

Delegate[] del = theDelegate.GetInvocationList();
for(int i = 0; i < del.Length; i++){
    int result = del[i]();

, но он не видит del [i] как метод.Я пробовал приводить к DelegateReturnsInt и тому подобное, но он дает мне ошибки типа приведения из-за отсутствия определения.

Мой большой вопрос - что делает foreach () таким особенным?

1 Ответ

12 голосов
/ 13 августа 2010

Он выполняет неявное приведение (если вы посмотрите на испущенный IL, вы увидите его).Это также означает, что вы можете получить неожиданное исключение приведения в этой строке, если это не то, что вы говорите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...