功能没有被调用

时间:2011-05-03 07:50:40

标签: c# function

我的一些代码遇到了麻烦, 我想调用一个方法,但该方法不会被调用,我不知道为什么。

    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 个答案:

答案 0 :(得分:7)

您的方法GetDataGridRows使用IEnumerable返回yield。直到您的foreach块被执行,您才会进入此方法。

使用yield关键字允许C#编译器使用它的状态机生成器来创建它返回的IEnumerable实现。 IEnumerable使用延迟调用,这实际上意味着它只在需要时才进行交互。在这里你可以看到它跳过声明到下一步,因为在那一点上,它只是IEnuemrable的一个实例,它还没有循环通过。

答案 1 :(得分:0)

我相信你应该使用......

table_id.DataSource = GetDataGridRows(dgTickets);
table_id.DataBind();