2010-05-07 14 views
17

Bu foreach ifadesine girdiğimde ...Var neden "foreach (tablodaki var satır)" bölümünde System.Object olarak değerlendirir?

foreach (var row in table.Rows) 

... var için araç ipucu class System.Object

class System.Data.DataRow neden karışık değil.

(Eğer merak ediyorsanız, evet, kod dosyanızın üstünde using System.Data var.)


Açık bir şekilde bildirimde bulunursam ...

foreach (DataRow row in table.Rows) 

... hata olmadan iyi çalışıyor.


Ayrıca yaparsam ...

var numbers = new int[] { 1, 2, 3 }; 
foreach (var number in numbers) 

... var struct System.Int32 olarak değerlendirir. Yani, sorun varforeach cümlede çalışmıyor.


Yani, DataRowCollection hakkında öğelerin otomatik olarak DataRow olarak değerlendirilmediği garip bir şey var. Ama ne olduğunu anlayamıyorum. Herkesin bir açıklaması var mı?


Hangi cevabı işaretlemiştim (Codeka ve Oliver) ... Sonuçta Codeka'yı işaretlemeye karar verdim çünkü sorumu gerçekten cevaplandırdı, ama Oliver cevap veriyor soru sormalıydım :)

cevap

17

DataRowCollection sınıfının yalnızca IEnumerable'un jenerik olmayan sürümünü uyguladığı için. Yani derleyici değişkenin türünün ne olduğunu bilmiyor.

Türü burada açık bir şekilde yerleştirdiğinizde, temel olarak derleyiciye object - DataRow arasındaki bir açık yayın üretmesini söylersiniz.

Bu, jeneriklerin kullanıma sunulmadan önce .NET 1.x günlerinde eklenen koleksiyonların ve sınıfların çoğunda bulabileceğiniz bir sorundur.

12

Codeka haklıyken, bu DataTable ve DataRow öğelerine daha fazla kolaylık sağlamak için başka yöntemler de vardır.

. Net 3.5 ile System.Data.DataSetExtensions aksamını ekleyebilirsiniz.

int columnIndex = 2; 

foreach(var row in MyDataTable.AsEnumerable()) 
{ 
    var content = row.Field<double>(columnIndex); 
} 
+0

Büyük noktası:

Bazı uzatma onunla AsEnumerable(this System.Data.DataTable) veya Field<T>(this System.Data.DataRow, int) gibi işlevleri bir foreach döngüsü içinde diyoruz ve uygun türü içine doğrudan sütun yayınlayabileceğim içeriyor! +1 –

+0

Bu cevabı seviyorum. +1 – wonea

İlgili konular