2011-01-25 76 views
3

在我們的Delphi應用程序中,我們使用TStringList來存儲字符串和相應的對象。對於另一個項目,我需要在C#中做類似的事情,但我不確定這樣做的最有效方法是什麼。到目前爲止,我想過使用數組列表,列表或字典。這些中的一個會對我想要做的有效嗎?如果不是,這是一個好方法嗎?什麼是C#最有效的對應於Delphi的TStringList?

回答

8

這取決於你需要什麼TStringList的特性。沒有真正的直接替代品。

A dictionary<string,object>是無序的,你不能有重複的字符串。沒有Text屬性可以一次設置所有的字符串,等等。如果所有這些都與你合適,我會爲此付出代價。

否則,你可能會考慮定義像個小類:

public class Item { 
    public string String {get;set;} 
    public object Object {get;set;} 
} 

,然後使用List<Item>。這給你一個(字符串,對象)元組的有序列表。

1

這取決於您的收藏需要的功能。我會用Dictionary<string, object>(泛型)。

+0

`TStringList`是[字符串集合](http://www.freepascal.org/docs-html/rtl/classes/tstrings.html),不是嗎? – abatishchev 2011-01-25 16:19:59

0

對於一個小對象列表,我會使用Dictionary<string,xxx>其中xxx是您希望按字符串索引存儲的對象的類型。

+3

字典是一個類型安全的散列表 – Jimmy 2011-01-25 16:11:30

+0

`字典`是通用的散列表,所以沒有必要使用HT – abatishchev 2011-01-25 16:23:32

+0

發佈更新,我必須有一個愚蠢的一天。 – Jamiec 2011-01-25 16:46:48

0

通用版本:

List<string> 

直接,非通用(不使用!):

ArrayList 

請參閱MSDN:1,2

+0

我認爲他更喜歡字典而不是列表 – 2011-01-25 16:25:19

2

如果字符串是唯一的,請使用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; 

最後,你可以定義自己的封裝類型和創建如果使用其他的解決方案之一,你不希望的列表。

相關問題