Функция не вызывается - PullRequest
0 голосов
/ 03 мая 2011

У меня проблемы с некоторым кодом, я хочу вызвать метод, но метод не вызывается, и я не знаю, почему.

    var rows = GetDataGridRows(dgTickets);
    int intTickets = 0;
    foreach (System.Windows.Controls.DataGridRow r in rows)
    { 
        //some code
    } 

    private IEnumerable<System.Windows.Controls.DataGridRow>
               GetDataGridRows(System.Windows.Controls.DataGrid grid)
    {
       var itemsSource = grid.ItemsSource as IEnumerable;
       if (null == itemsSource) yield return null;
       foreach (var item in itemsSource)
       {
           var row = grid.ItemContainerGenerator.ContainerFromItem(item)
                                 as System.Windows.Controls.DataGridRow;
           if (null != row) yield return row;
       }
    }

var rows = GetDataGridRows(dgTickets); не вызываетфункции и просто перейти к int intTickets = 0

Я понятия не имею, что делать

Заранее спасибо

Ответы [ 2 ]

7 голосов
/ 03 мая 2011

Ваш метод GetDataGridRows возвращает IEnumerable, используя yield. Только когда ваш блок foreach будет выполнен, вы вступите в этот метод.

Использование ключевого слова yield позволяет компилятору C # использовать генератор конечного автомата для создания реализации IEnumerable, которую он возвращает. IEnumerable использовать ленивый вызов, что по сути означает, что он используется только тогда, когда это необходимо. Здесь вы видите, что он перепрыгивает через декларацию к следующему шагу, потому что в этот момент это только экземпляр IEnuemrable, который еще не прошел цикл.

0 голосов
/ 03 мая 2011

Я считаю, что вы должны использовать ...

table_id.DataSource = GetDataGridRows(dgTickets);
table_id.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...