在我們的Delphi應用程序中,我們使用TStringList來存儲字符串和相應的對象。對於另一個項目,我需要在C#中做類似的事情,但我不確定這樣做的最有效方法是什麼。到目前爲止,我想過使用數組列表,列表或字典。這些中的一個會對我想要做的有效嗎?如果不是,這是一個好方法嗎?什麼是C#最有效的對應於Delphi的TStringList?
回答
這取決於你需要什麼TStringList的特性。沒有真正的直接替代品。
A dictionary<string,object>
是無序的,你不能有重複的字符串。沒有Text屬性可以一次設置所有的字符串,等等。如果所有這些都與你合適,我會爲此付出代價。
否則,你可能會考慮定義像個小類:
public class Item {
public string String {get;set;}
public object Object {get;set;}
}
,然後使用List<Item>
。這給你一個(字符串,對象)元組的有序列表。
這取決於您的收藏需要的功能。我會用Dictionary<string, object>
(泛型)。
對於一個小對象列表,我會使用Dictionary<string,xxx>
其中xxx
是您希望按字符串索引存儲的對象的類型。
字典是一個類型安全的散列表 – Jimmy 2011-01-25 16:11:30
`字典
發佈更新,我必須有一個愚蠢的一天。 – Jamiec 2011-01-25 16:46:48
這篇博客顯示相當不錯的排序列表和字典之間的差異
http://blog.bodurov.com/Performance-SortedList-SortedDictionary-Dictionary-Hashtable/
如果字符串是唯一的,請使用Dictionary<string, T>
。如果它們不能保證是唯一的,那麼字典就不合適,你可能會想使用一個列表Tuple<string, T>
(C#4)或者列表KeyValuePair<string, T>
,這將與字典非常相似,除了明顯不保證唯一性,並且它保留了字典不一定要這樣做的順序。
Dictionary<string, T>> yourDictionary; // or
List<Tuple<string, T>> yourCollection; // or
List<KeyValuePair<string, T>> yourCollection;
最後,你可以定義自己的封裝類型和創建如果使用其他的解決方案之一,你不希望的列表。
- 1. 爲什麼我的TStringList沒有排序?
- 2. 爲Delphi的UnicodeString獲取UTF-16LE字節的最有效方法是什麼?
- 3. 對於C++分配器,std :: align_val_t有效的對齊值是什麼?
- 4. 什麼是改變對的最有效的時間間隔?
- 5. 什麼是WinForms控件對應於VCL(Delphi)TControlBar?
- 6. 在Delphi中實現C#的BackgroundWorker的最佳方式是什麼?
- 7. 在Java(Android)語言中是否有類似Delphi中的TStringList?
- 8. C++ - 什麼是測試空指針最有效的方法?
- 9. 對於Node.js和Javascript來說,讀寫文件最有效的媒介是什麼?
- 10. 迭代JavaScript對象的最有效方法是什麼?
- 11. 什麼是將DataTable轉換爲對象的最有效方法[,]?
- 12. 清除ActiveRecord對象集合的最有效方法是什麼?
- 13. 使用TStringList在Delphi中加載大文本文件的最佳方式是什麼?
- 14. 替換爲Delphi Prism中的TStringList。
- 15. 在Delphi中使用大量內存的對象的TStringList XE
- 16. 將C++結構體編組爲C#的最有效方法是什麼?
- 17. 什麼是最快/最有效的查找/替換應用程序* nix
- 18. 檢索多對多關係對象的最有效方法是什麼?
- 19. 如何更快搜索Delphi TStringList中的名稱/值對?
- 20. 爲什麼業餘執行Delphi的TStringList的Fortran版本比Delphi的內置版本低10倍?
- 21. 什麼是在c#中的表中存儲大量數據的最有效的方式是什麼?
- 22. 設置屬於某個類的類的最有效方法是什麼
- 23. 對於沒有ID的對象,使用NHibernate的最佳方式是什麼?
- 24. 基於對象值濃縮對象列表的有效方法是什麼?
- 25. 將c#中的對象列表傳遞給C++ win32 native dll的最有效方法是什麼?
- 26. 什麼是有效的方式對現有的系統登錄
- 27. 對於具有「更多特異性」的重寫行,最有效的查詢模式是什麼?
- 28. 什麼是C++中最高效的矩陣表示?
- 29. 對於UITableViewCell,objective-c cocoa-touch中的C#「tag」屬性等效於什麼?
- 30. 識別和替換ObservableCollection中的對象的最有效方法是什麼?
`TStringList`是[字符串集合](http://www.freepascal.org/docs-html/rtl/classes/tstrings.html),不是嗎? – abatishchev 2011-01-25 16:19:59