一千萬個為什麽

搜索

為什麽var在“foreach(table.Rows中的var row)”中評估為System.Object?


當我輸入這個 foreach 語句時......

foreach (var row in table.Rows)

...the tooltip for var says class System.Object

我很困惑為什麽它不是類System.Data.DataRow

(如果您想知道,是的,我在代碼文件的頂部使用了使用System.Data 。)


如果我明確聲明類型,如...

foreach (DataRow row in table.Rows)

...它沒有錯誤,工作正常。


如果我這樣做......

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

... var求值為 struct System.Int32 。因此,問題不在於 varforeach 子句中不起作用。


因此, DataRowCollection 有些奇怪的地方,其中的項目不會自動評估為 DataRow 。但我無法弄清楚它是什麽。有沒有人有解釋?


更新</強>

我真的被撕裂了對Mark的回答(Codeka和Oliver)......最後,我決定標記Codeka,因為它真的回答了我的問題,但Oliver回答了我應該問的問題:)

最佳答案

那是因為 DataRowCollection class僅實現 IEnumerable 的非泛型版本。所以編譯器不知道變量的類型是什麽。

通過明確地將類型放在那裏,您基本上告訴編譯器生成從 objectDataRow 的顯式轉換。

這是一個問題,你會發現許多集合和類在.NET 1.x天後,在泛型可用之前添加回來。

轉載註明原文: 為什麽var在“foreach(table.Rows中的var row)”中評估為System.Object?

猜你喜歡