如何在c#中创建多值字典?
例如,Dictionary<T,T,T>
,其中第一个T是键,其他两个是值。
所以这是可能的:Dictionary<int,object,double>
谢谢
发布于 2009-02-20 15:18:41
只需创建一个Pair<TFirst, TSecond>
类型并将其用作您的值。
我的C# in Depth source code中就有一个这样的例子。为了简单起见,在这里转载:
using System;
using System.Collections.Generic;
public sealed class Pair<TFirst, TSecond>
: IEquatable<Pair<TFirst, TSecond>>
{
private readonly TFirst first;
private readonly TSecond second;
public Pair(TFirst first, TSecond second)
{
this.first = first;
this.second = second;
}
public TFirst First
{
get { return first; }
}
public TSecond Second
{
get { return second; }
}
public bool Equals(Pair<TFirst, TSecond> other)
{
if (other == null)
{
return false;
}
return EqualityComparer<TFirst>.Default.Equals(this.First, other.First) &&
EqualityComparer<TSecond>.Default.Equals(this.Second, other.Second);
}
public override bool Equals(object o)
{
return Equals(o as Pair<TFirst, TSecond>);
}
public override int GetHashCode()
{
return EqualityComparer<TFirst>.Default.GetHashCode(first) * 37 +
EqualityComparer<TSecond>.Default.GetHashCode(second);
}
}
发布于 2009-02-20 16:31:13
如果您试图将值组合在一起,这可能是创建一个简单的结构或类并将其用作字典中的值的绝佳机会。
public struct MyValue
{
public object Value1;
public double Value2;
}
然后你就可以有你的字典了
var dict = new Dictionary<int, MyValue>();
您甚至可以更进一步,实现您自己的字典类,该类将处理您需要的任何特殊操作。例如,如果您希望有一个接受int、object和double的Add方法
public class MyDictionary : Dictionary<int, MyValue>
{
public void Add(int key, object value1, double value2)
{
MyValue val;
val.Value1 = value1;
val.Value2 = value2;
this.Add(key, val);
}
}
然后,您可以像这样简单地实例化并添加到字典中,而不必担心创建“MyValue”结构:
var dict = new MyDictionary();
dict.Add(1, new Object(), 2.22);
发布于 2009-02-20 15:18:42
Dictionary<T1, Tuple<T2, T3>>
编辑:对不起-我忘了你在.NET 4.0之前是不会得到元组的。哦!
https://stackoverflow.com/questions/569903
复制相似问题