DataTable test = new DataTable();
foreach (var r in test.Rows)
{
r[1].tostring();
}
爲什麼編譯器不明白r是DataRow? 請參閱下圖瞭解錯誤消息。var的行爲
DataTable test = new DataTable();
foreach (var r in test.Rows)
{
r[1].tostring();
}
爲什麼編譯器不明白r是DataRow? 請參閱下圖瞭解錯誤消息。var的行爲
DataTable.Rows
使用的舊式(非通用)集合的屬性。實際的類型是DataRowCollection
,它定義了非通用的an enumerator,因此它返回類型爲object
的實例。爲了解決這個問題的框架(3.5+)稱爲DataTable.AsEnumerable
返回正確類型的枚舉的後續版本也提供了新的擴展方法:
DataTable test = new DataTable();
foreach (var r in test.AsEnumerable())
{
r[1].ToString();
}
如果你是卡在.NET的舊版本你會必須手動將r
轉換爲DataRow
。
DataTable.Rows
的類型是DataRowCollection
,它繼承自InternalDataCollectionBase
,它繼承了非通用的ICollection
。所以它是不是和ICollection<DataRow>
,而是objects
的集合。見here。
With foreach (DataRow r in test.Rows)
,您明確告訴C#將每個對象轉換爲一個DataRow
var是一個隱式類型!它別名任何類型!當你聲明一個「var類型」時,你基本上是在告訴編譯器嘿看,我不知道什麼類型適合這個,所以無論右邊表達式的類型如何評估,都是合適的類型!
因此, 顯然,每一行都作爲一個對象返回,所以除非將它們轉換爲適當的類型,否則它們將保持爲對象!
test.Rows返回什麼類型? –