2010-03-17 11 views
5

Neden bir olay işleyicisi, döngü dışı bir döngü içinde eklendiyse, neden çağrılmaz? ÖrneğinNeden bir olay işleyicisi, döngü dışı bir döngü içinde eklendiyse, neden çağrılmaz?

:

IEnumerable<MyType> list = someCollection.Select(i => new MyType(i)); 

foreach (var item in list) 
item.PropertyChanged += item_PropertyChanged; <-- this never gets called 

Ayşe liste

list = someCollection.Select(i => new MyType(i)).ToArray(); 

denilen olsun mu olay işleyicisi gibi atanmışsa ..

Neden? (Ben bir LINQ sorgu tembel olması ile ilgisi vardır hayal ama sonucu ile döngü aslında yeterli değil mi?)

cevap

3

Sizin Select çağrı anlamına gelir MyType yeni örneklerini oluşturuyor. .. IEnumerable<MyType> o zaman yeni dizisi yeni nesneler Eğer list numaralandırmak her seferinde uğraşıyoruz olarak list yazıldığında

. Olay işleyicilerini eklediğiniz nesneler, daha sonra sınandığınız aynı nesneler değil.

list o zaman nesnelerin aynı koleksiyon Eğer list numaralandırmak her zaman uğraşıyoruz (ToArray çağrısını kullanarak) MyType[] olarak tuşlandığmda. Olay işleyicileri eklediğiniz nesneler , daha sonra sınamak üzere olan aynı nesneler.