日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈 System.Data.DataRowCollection 类

發布時間:2025/3/17 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈 System.Data.DataRowCollection 类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們來看看以下程序吧:

01: using System; 02: using System.Data; 03: using System.Linq; 04: 05: namespace Skyiv.Ben 06: { 07: class Program 08: { 09: static void Main() 10: { 11: var dt = new DataTable(); 12: dt.Rows.Add(); 13: foreach (var row in dt.Select()) 14: { 15: Console.WriteLine(row.GetType()); 16: Console.WriteLine(row.RowState); 17: } 18: } 19: } 20: }

上述程序中第 12 行中的 DataTable 類的 Rows 屬性的類型為 DataRowCollection 類。第 13 行中的 DataTable 類的 Select 方法返回 DataRow[] 數組。我們知道,foreach 語句對實現 System.Collections.IEnumerableSystem.Collections.Generic.IEnumerable<T> 接口的數組或對象集合中的每個元素重復一組嵌入式語句。所以該 foreach 語句中的 row 變量的類型被推斷為 DataRow 類。這個程序的運行結果如下所示:

System.Data.DataRow Added

如果把上述程序中的第 13 行改為:

13: foreach (var row in dt.Rows)

這時,會出錯以下編譯錯誤:

Program.cs(16,31): error CS1061:“object”不包含“RowState”的定義,并且找不到可接受類型為“object”的第一個參數的擴展方法“RowState”(是否缺少 using 指令或程序集引用?)

這是因為 DataRowCollection 類只實現了 System.Collections.IEnumerable 接口,而沒有實現 System.Collections.Generic.IEnumerable<DataRow> 接口,所以該 foreach 語句中的 row 變量的類型被推斷為 System.Object 類。

僅實現 IEmnumerable 接口而沒有實現 IEnumerable<T> 接口的集合類還有非常多,例如:

  • System.Data.DataColumnCollection
  • System.Data.ConstraintCollection
  • System.Data.Common.DataTableMappingCollection
  • System.Windows.Forms.DataGridViewRowCollection
  • System.Web.UI.WebControls.GridViewRowCollection

因為泛型是在 .NET 2.0 中才引入的,上述類中的大部分都是在 .NET 1.0 中已經就有了。但是 Microsoft 應該在 .NET 2.0 以后為上述類實現 IEnumerable<T> 接口才對。這不能不說是 .NET Framework Base Class Library 的一個遺憾。請參閱 MSDN 論壇上的一個相關的帖子:Missing linq extension method 。

幸運的是,在 .NET Framework 3.5 及其以后的版本中, 在 System.Linq 命名空間中增加了 IEnumerable.Cast<TResult> 擴展方法,可以將 IEnumerable 的元素轉換為指定的 TResult 類型。這樣,上述程序第 13 行改為:

13: foreach (var row in dt.Rows.Cast<DataRow>())

就可以正常工作了。當然,在這個場合還有更好的解決方案,就是將第 13 行改為:

13: foreach (DataRow row in dt.Rows)

就可以了。

也有好消息,就是 System.Collections.ObjectModel 命名空間中的 Collection<T> 類實現了 IEnumerable<T> 接口,而 Collection<T> 類有很多派生類。例如 System.Net 命名空間中的 IPEndPointCollection 類就是從 Collection<IPEndPoint> 類繼承,因此也就實現了 IEnumerable<IPEndPoint> 接口。

參考資料

  • Missing linq extension method
  • MSDN: foreach, in (C# Reference)
  • MSDN: DataRowCollection 類(System.Data)
  • MSDN: IPEndPointCollection 類(System.Net)
  • MSDN: Collection(T) 類(System.Collections.ObjectModel)
  • MSDN: IEnumerable 接口(System.Collections)
  • MSDN: IEnumerable(T) 接口(System.Collections.Generic)
  • MSDN: Enumerable.Cast(TResult) 方法(System.Linq)
  • 總結

    以上是生活随笔為你收集整理的浅谈 System.Data.DataRowCollection 类的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 中文字幕久久av | 黄色av一区二区三区 | 久久婷婷六月 | 日本一区二区三区视频免费看 | 在线亚洲网站 | 免费一级黄色片 | 手机看片久久久 | 亚洲av无码乱码在线观看富二代 | 91麻豆视频| 88久久精品无码一区二区毛片 | 四虎视频在线观看 | 国产成年无码久久久久毛片 | 一区二区三区免费在线观看视频 | 亚洲一区欧美二区 | 青青草在线免费视频 | 欧美成人一区二免费视频软件 | 欧美极品少妇无套实战 | 91.xxx.高清在线 | 日日操夜夜爱 | 中文永久免费观看 | 又色又爽又黄gif动态图 | 日韩一级av毛片 | 亚洲永久精品一区二区 | 亚洲色大成网站www www.97ai.com | 熟妇人妻中文字幕 | 好吊色视频一区二区三区 | 欧美黑人做爰爽爽爽 | 影音先锋人妻啪啪av资源网站 | 日本一区二区不卡在线 | 操模特 | 精品视频无码一区二区三区 | 成人wwxx免费观看 | 日韩午夜免费视频 | 99久久九九| 91精品国产一区二区三区蜜臀 | 波多野结衣高清在线 | 国产在成人精品线拍偷自揄拍 | 五月天狠狠干 | 亚洲xxxxxx| 亚洲最大成人网站 | 亚洲色图36p | 一区二区三区在线播放 | 人人玩人人弄 | 欧美日本在线视频 | 欧美人与禽zozzo禽性配 | 国产一区视频免费观看 | 亚洲精品无码一区二区 | 日韩有码中文字幕在线观看 | 色图在线观看 | 亚洲图片88 | 人妻换人妻仑乱 | 四川少妇xxx奶大xxx | 成人激情视频网站 | 色婷网| 亚洲做受高潮 | 人妻 校园 激情 另类 | 天天干夜夜看 | 日本韩国欧美一区二区三区 | 午夜日韩欧美 | 天天操天天干视频 | 欧美大黑b| 9久9久9久女女女九九九一九 | japanese21ⅹxx日本 | 污污视频网站免费观看 | 欧美日韩偷拍视频 | 午夜做爰xxxⅹ性高湖视频美国 | 动漫毛片 | 啪啪免费网站 | 亚洲图片自拍偷拍区 | 97色网| 国产吞精囗交久久久 | 超碰偷拍 | 美女啪啪一区二区 | 污污网站免费在线观看 | 九九久视频 | 人人草超碰 | 日韩欧美精品在线视频 | 德国老妇性猛交 | 亚洲一级片网站 | 日韩在线一二三区 | 免费人成在线观看视频播放 | 福利在线网站 | 天堂va欧美va亚洲va老司机 | 日韩欧美卡一卡二 | 国产欧美视频一区二区 | 国产成人77亚洲精品www | 久草中文网 | 男人吃奶视频 | 黄色顶级片 | 亚洲图片自拍偷拍 | 天堂av√| 中国女人真人一级毛片 | av一区二区三区在线观看 | 久久午夜精品视频 | 国内自拍青青草 | 夜久久| 成人羞羞免费 | 亚洲色图另类小说 | 一级黄av|