在 .NET 中存储字符串对、创建对象或使用类的最佳方法是什么?

问题描述 投票:0回答:8

不知道我是否度过了“忙碌的一天” - 但我只是想知道这里最好的路线是什么。

背景:

我有一个字段列表,我想用它们存储别名(我正在使用.NET 2.0 BTW),例如

enter image description here

所以它本质上是一对字符串:

参考,参考

社区,社区

POST_CODE,邮政编码

...我认为一直为这样的事情创建对象似乎太过分了,所以我应该创建一个 StringDictionary 并以这种方式存储值,即使我不会使用 StringDictionary 的任何功能类,我不关心键值对关联等 - 我只是想本质上保留一对字符串。

任何帮助/指示都会很棒。

c# string collections .net-2.0
8个回答
56
投票

.NET 的“对”泛型类是

Tuple
。你会这样使用它:

var strings=new List<Tuple<string, string>>();
strings.Add(Tuple.Create("REFERENCE", "Ref"));

如果最左边的字符串是唯一的(即键),则字典是完全可以接受的替代品。否则你会得到错误。

至于使用内置集合还是创建实际对象更好,取决于您的需求(稍后您会添加更多列吗?您不能用字典方法做到这一点),您使用它的频率(如果它是核心类型,你可能应该为它制作一个领域模型)等等。

编辑:至于不使用任何字典内置功能,这是不正确的:您正在使用其二分搜索算法和内部树结构来进行快速查找。

Tuple
或您自己的类型的列表很可能不会有此内容,它将恢复为线性搜索。


19
投票

System.Tuple怎么样?


15
投票

如果您的“字段名称”是唯一的,您可以使用通用的

Dictionary<string, string>

否则,如果您不介意重复键,则可以使用 Lookup 类。

我不会太担心您是否使用这些类的全部功能。我认为更重要的问题应该是编写简单、易于阅读和维护的代码。


8
投票

Tuple<string,string>
呢?它内置于 .net 4.0 中,并且是轻量级的。


7
投票

在我看来,最好使用自定义结构来存储两个字符串,因为:

System.Collections.Generic.Dictionary
System.Collections.Specialized.NameValueCollection
需要方法
Add
将字符串添加到其中 - 这是额外的代码行。 类
System.Tuple
仅具有 ReadOnly 属性 – 这可能是一个障碍。

简单结构示例:

public struct DoppelWert
{
 public string Wert1; 
 public string Wert2;
}

4
投票

对于字符串对,也可以使用 NameValueCollection


2
投票

很惊讶,没有人提到KeyValuePair? https://msdn.microsoft.com/en-us/library/5tbh8a42(v=vs.110).aspx

请注意,如果您关心性能,请查看此比较 http://www.dotnetperls.com/keyvaluepair


0
投票

从 C# 版本 9 开始,您还可以使用 目标类型的新表达式。它类似于元组,但更具可读性,因为您可以为字段指定名称,而不是使用 Item1、Item2...

© www.soinside.com 2019 - 2024. All rights reserved.