我有一个Dictionary
,其中包含一些简单的string,string
值对。问题是,对于多个项目,有时密钥必须为空,这会导致字典错误 - >
this key already exists.
还有其他课吗?
另外,我正在使用.NET 2.0,所以我不能使用Tuple类......
while (nav.MoveToNext())
{
if (nav != null)
{
if (!String.IsNullOrEmpty(nav.Value))
{
if (nav.HasChildren)
{
navChildren = nav.Clone();
navChildren.MoveToFirstChild();
if (navChildren != null)
if (!veldenToSkip.Contains(nav.LocalName.Trim().ToLower())
&& !nav.LocalName.StartsWith("opmerkingen_"))
itemTable.Add(nav.LocalName.Replace("_", " "), navChildren.Value);
//normal key and value
while (navChildren.MoveToNext())
{
if (!veldenToSkip.Contains(nav.LocalName.Trim().ToLower()))
{
if (navChildren != null)
{
if (!String.IsNullOrEmpty(navChildren.Value))
{
itemTable.Add("", navChildren.Value);
//Add blank keys
}
}
}
}
}
}
}
}
我只想要这样的结构:
value1 value2
value3 value4
value5
value6
value7 value8
...
答案 0 :(得分:6)
你可以实现ILookup接口......
包装词典< TKEY的,列表与LT; TValue> >
答案 1 :(得分:3)
你可以使用Dictionary<yourKeyType, List<yourObjectType>>.
就像你可以为每个键添加多个项目...在添加之前,检查你的密钥是否已经存在 - &gt;添加它,否则创建一个新列表。更优雅地将它包装在一个内部处理它的类中。
您可以使用的类的示例:
class MultiValueDictionary<TKey, TValue>
{
private Dictionary<TKey, List<TValue>> _InternalDict = new Dictionary<TKey, List<TValue>>();
public void Add(TKey key, TValue value)
{
if (this._InternalDict.ContainsKey(key))
this._InternalDict[key].Add(value);
else
this._InternalDict.Add(key, new List<TValue>(new TValue[]{value}));
}
public List<TValue> GetValues(TKey key)
{
if (this._InternalDict.ContainsKey(key))
return this._InternalDict[key];
else
return null;
}
}
答案 2 :(得分:3)
因为具有相同键类型的多个值会否定字典的效用,所以KeyValuePairs列表经常更有意义:
List<KeyValuePair<string, string>> itemTable = new List<KeyValuePair<string, string>>();
答案 3 :(得分:2)
只需生成一个伪键......
int emptyKey = 0;
...
if (!String.IsNullOrEmpty(navChildren.Value))
{
string key = "Empty_" + emptyKey.ToString();
emptyKey ++;
itemTable.Add(key, navChildren.Value);
//Add blank keys
}
你仍然会有值,但请注意,词典不保留顺序(添加)。
答案 4 :(得分:1)
尝试使用Tuple:
http://sankarsan.wordpress.com/2009/11/29/tuple-in-c-4-0/
<强>更新强>
好了,现在帖子说.Net 2.0所以......这个答案不行!我认为这很有用:
答案 5 :(得分:1)
虽然非常详细,但这可行:
class Pair<A, B>
{
public A Key { get; set; }
public B Value{ get; set; }
}
var items = new List<Pair<string, string>>();
items.Add(new Pair<string,string>() { Key = "", Value = "Test" });
items.Add(new Pair<string,string>() { Key = "", Value = "Test" });