2011-01-25 56 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; 

最后,你可以定义自己的封装类型和创建如果使用其他的解决方案之一,你不希望的列表。

相关问题