不知道我是否度过了“忙碌的一天” - 但我只是想知道这里最好的路线是什么。
背景:
我有一个字段列表,我想用它们存储别名(我正在使用.NET 2.0 BTW),例如
所以它本质上是一对字符串:
参考,参考
社区,社区
POST_CODE,邮政编码
...我认为一直为这样的事情创建对象似乎太过分了,所以我应该创建一个 StringDictionary 并以这种方式存储值,即使我不会使用 StringDictionary 的任何功能类,我不关心键值对关联等 - 我只是想本质上保留一对字符串。
任何帮助/指示都会很棒。
Tuple
。你会这样使用它:
var strings=new List<Tuple<string, string>>();
strings.Add(Tuple.Create("REFERENCE", "Ref"));
如果最左边的字符串是唯一的(即键),则字典是完全可以接受的替代品。否则你会得到错误。
至于使用内置集合还是创建实际对象更好,取决于您的需求(稍后您会添加更多列吗?您不能用字典方法做到这一点),您使用它的频率(如果它是核心类型,你可能应该为它制作一个领域模型)等等。
编辑:至于不使用任何字典内置功能,这是不正确的:您正在使用其二分搜索算法和内部树结构来进行快速查找。
Tuple
或您自己的类型的列表很可能不会有此内容,它将恢复为线性搜索。
System.Tuple怎么样?
如果您的“字段名称”是唯一的,您可以使用通用的
Dictionary<string, string>
。
否则,如果您不介意重复键,则可以使用 Lookup 类。
我不会太担心您是否使用这些类的全部功能。我认为更重要的问题应该是编写简单、易于阅读和维护的代码。
那
Tuple<string,string>
呢?它内置于 .net 4.0 中,并且是轻量级的。
在我看来,最好使用自定义结构来存储两个字符串,因为:
System.Collections.Generic.Dictionary
和 System.Collections.Specialized.NameValueCollection
需要方法 Add
将字符串添加到其中 - 这是额外的代码行。
类 System.Tuple
仅具有 ReadOnly 属性 – 这可能是一个障碍。
简单结构示例:
public struct DoppelWert
{
public string Wert1;
public string Wert2;
}
对于字符串对,也可以使用 NameValueCollection
很惊讶,没有人提到KeyValuePair? https://msdn.microsoft.com/en-us/library/5tbh8a42(v=vs.110).aspx
请注意,如果您关心性能,请查看此比较 http://www.dotnetperls.com/keyvaluepair
从 C# 版本 9 开始,您还可以使用 目标类型的新表达式。它类似于元组,但更具可读性,因为您可以为字段指定名称,而不是使用 Item1、Item2...