2011-05-03 6 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

+1

중단 점을 사용하여 코드를 단계별로 호출하지 않았는지 확인 했습니까? 아니면 원하는 출력을 얻지 못했기 때문에 호출되지 않는다고 말하는 것입니까? –

+0

'GetDataGridRows'가 호출되지 않는다는 것을 어떻게 알 수 있습니까? 그것에 브레이크 포인트를 넣었습니까? –

답변

7

귀하의 방법 GetDataGridRowsyield을 사용하여 IEnumerable을 반환합니다. foreach 블록이 실행될 때까지는이 방법을 사용할 수 없습니다.

yield 키워드를 사용하면 C# 컴파일러에서 상태 기계 생성기를 사용하여 반환하는 IEnumerable 구현을 만들 수 있습니다. IEnumerable은 지연 호출을 사용합니다.이 호출은 필연적으로 필요할 때만 중재됨을 의미합니다. 여기서 선언문을 넘어서 다음 단계로 넘어가는 것을 볼 수 있습니다. 그 시점에서 아직 순환되지 않은 것은 IEnuemrable의 인스턴스 일 뿐이 기 때문입니다.

+0

그래, 나도 안다.하지만 그는 내 '행'을 채우지 않고 다른 곳에서 코드를 사용한다. 나는 그 함수를 사용한다. – user735646

+0

@ user735646이 경우 코드를 호출 할 가능성이 높다. 잘못된 시간 ... 예를 들어 그리드가 데이터로 채워지기 전에 호출하고 있습니까? –

+0

그리드의 itemssource에는 13 개의 항목이 없습니다. – user735646

0

...

table_id.DataSource = GetDataGridRows(dgTickets); 
table_id.DataBind(); 
관련 문제