2011-05-03 174 views
0

我遇到了一些我的代码, 我想调用一个方法,但该方法没有被调用,我不知道为什么。函数没有被调用

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

我不知道该怎么办

在此先感谢

+1

你在按F10还是F11?你能否详细说明不调用函数 – V4Vendetta 2011-05-03 07:55:05

+1

你确定调用不会发生在使用中断点并逐步完成代码的情况下吗?还是你说它没有被调用,因为你没有得到期望的输出? – 2011-05-03 07:55:23

+0

你怎么知道'GetDataGridRows'没有被调用?你有没有在其中放置一个断点? – 2011-05-03 07:55:31

回答

7

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

yield关键字的使用允许C#编译器使用它的状态机生成器来创建它返回的IEnumerable的实现。 IEnumerable使用延迟调用,这意味着它只在需要时才被整合。这是你看到它跳过声明到下一步的地方,因为在那一点上,它只是IEnuemrable的一个实例,它尚未循环。

+0

是的,我看到了,但他没有填充我的'行',并在我的代码中的另一个地方,我也使用该功能,并在那里工作 – user735646 2011-05-03 08:01:00

+0

@ user735646在这种情况下,我会说你可能调用的代码在错误的时间...例如,你是否在网格填充数据之前调用它? – 2011-05-03 08:02:38

+0

否网格的itemssource包含13个项目 – user735646 2011-05-03 08:06:59

0

我相信你应该使用...

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