2016-11-19 16 views
6

kodum var. kurucu GetItems işlevini girmelidir, ancak kesme noktasını koyduğumda, yalnızca durmaz.yapıcı bir işlev girmeyin C#

Sorun nedir?

namespace Storehouse { 
    public partial class MainForm : Form { 
     public MainForm() { 
      InitializeComponent(); 
      var a = GetItems(fILEToolStripMenuItem); 

     } 

     public IEnumerable<ToolStripMenuItem> GetItems(ToolStripMenuItem item) { 
      foreach (ToolStripMenuItem dropDownItem in item.DropDownItems) { 
       if (dropDownItem.HasDropDownItems) { 
        foreach (ToolStripMenuItem subItem in GetItems(dropDownItem)) { 
         yield return subItem; 
        } 
        yield return dropDownItem; 
       } 

      } 

     } 
} 
+0

Kırılma noktasını nereye yerleştirdiniz? – Rahul

+5

"Verim" ve "IEnumerable" kullanımı nedeniyle. Bunu denemenizi öneririz: var a = GetItems (fILEToolStripMenuItem) .ToList(); '. –

cevap

11

Eğer yield kullanıyorsanız, bu ertelenmiş yürütme demektir, bu nedenle bu gibi, değişken a numaralandırmak gerekir:

var a = GetItems(fILEToolStripMenuItem).ToList(); 

Ayrıca ToArray() kullanabilirsiniz ne olursa olsun, sadece gerek IEnumerable numaranızı numaralandırın.