首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多值字典

多值字典
EN

Stack Overflow用户
提问于 2009-02-20 15:14:07
回答 10查看 135.6K关注 0票数 84

如何在c#中创建多值字典?

例如,Dictionary<T,T,T>,其中第一个T是键,其他两个是值。

所以这是可能的:Dictionary<int,object,double>

谢谢

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-02-20 15:18:41

只需创建一个Pair<TFirst, TSecond>类型并将其用作您的值。

我的C# in Depth source code中就有一个这样的例子。为了简单起见,在这里转载:

代码语言:javascript
复制
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);
    }
}
票数 66
EN

Stack Overflow用户

发布于 2009-02-20 16:31:13

如果您试图将值组合在一起,这可能是创建一个简单的结构或类并将其用作字典中的值的绝佳机会。

代码语言:javascript
复制
public struct MyValue
{
    public object Value1;
    public double Value2;
}

然后你就可以有你的字典了

代码语言:javascript
复制
var dict = new Dictionary<int, MyValue>();

您甚至可以更进一步,实现您自己的字典类,该类将处理您需要的任何特殊操作。例如,如果您希望有一个接受int、object和double的Add方法

代码语言:javascript
复制
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”结构:

代码语言:javascript
复制
var dict = new MyDictionary();
dict.Add(1, new Object(), 2.22);
票数 70
EN

Stack Overflow用户

发布于 2009-02-20 15:18:42

代码语言:javascript
复制
Dictionary<T1, Tuple<T2, T3>>

编辑:对不起-我忘了你在.NET 4.0之前是不会得到元组的。哦!

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/569903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档