[英]Best c# generics class for replacing DataTable as collection?
我正在嘗試將傳統的C#.NET 1.1應用程序帶入現代時代。 我們將DataTables用於我們可能是業務對象的集合。
鑒於大多數代碼都認為它是在與DataRow的接口進行通信,那么什么樣的泛型集合才能實現最不痛苦的過渡?
如果我正確地閱讀你的問題,你要求哪個容器只存儲你的Business對象列表,然后允許你只是枚舉整個集合,或通過索引選擇。
好吧,我會考慮查看List <>
您可以在哪里接受IList <>(訪問索引)或IEnumerable <>(在集合上使用foreach循環)
例如
private void PrintAll<T>(IEnumerable<T> items)
{
foreach(T item in items)
Console.WriteLine(item.ToString());
}
現在我可以傳入任何使用IEnumerable <>接口的容器,包括List <>和普通數組
例
List<Person> people = new List<Person>();
//add some people to the list
PrintAll<Person>(people);
HTH
骨頭
為什么不將DataTable和DataRow子類化為適合您的業務邏輯的類型,而不是改變DataSet / DataTable API?
對子類DataRow和DataTable對象的支持非常棒。 您將在新代碼中獲得所需的強類型,以及舊代碼的向后兼容性。 此外,您可以在任何需要/想要的地方注入業務邏輯。
如果您習慣使用DataTable
,可能您已經習慣了更改跟蹤和適配器(等)帶來的持久性支持。 在這種情況下,您是否考慮過LINQ-to-SQL和/或Entity Framework? 這些都支持豐富的chaneg跟蹤和自動持久性,同時提供各種其他DAL用例,例如可組合查詢和所有其他LINQ優點。
絕對值得調查。
請注意,更改為鍵入的POCO實體(即不是DataRow
或其中的子類)仍然是一個很大的偏差,因此它不會是一個簡單的更改。 如果你沒有時間進行重大改變,堅持使用DataTable
(可能是鍵入的)將是務實的。
這將為您提供EntitySet<T>
, IQueryable<T>
等,或者您可以使用List<T>
, Collection<T>
等進行臨時使用。
將“應用程序帶入現代”的最簡單方法是簡單地將代碼從Visual Studio 2003升級到2005或2008.如果您希望向類添加行為(“可能是業務對象”),事實上,DataSet,DataTable和DataRow是作為部分類實現的。
上面提到的解決方案會給你帶來很多損失,包括變更跟蹤,除非你正在尋找的東西 - 在很大程度上偏離。 LINQ to SQL,實體框架等都提供了變更跟蹤,但是在工作單元機制內連接到數據庫,而不是將工作單元跟蹤直接放在對象上,就像DataRow一樣。
希望你不是簡單地改變你的“應用程序進入現代時代”並且你有一些好處,你試圖獲得你放棄的功能和你花費的努力?
順便說一句,這都假設你正在使用Typed DataSet ...在我看來,對於大多數用途來說,無類型的DataSet對象有點愚蠢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.