Как foreach бросает без явных/неявных переопределений?

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

foreach(DelegateReturnsInt del in theDelegate.getInvocationList())

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

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

но это не рассматривает del [я] как метод. Я попытался бросить в DelegateReturnsInt и такой, но он дает мне обдумывавший ошибки типа, не определяющие его.

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

7
задан Nicholas 12 August 2010 в 20:22
поделиться

1 ответ

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

12
ответ дан 6 December 2019 в 21:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: