构建泛型集合类

Dre*_*teh 2 c# generics collections dictionary

我正在构建以下类来管理字典.

    public class EnumDictionary<TKey, TValue>
    {
        private Dictionary<TKey, TValue> _Dict;

        public EnumDictionary(Dictionary<TKey, TValue> Dict)
        {
            this._Dict = Dict;
        }

        public TKey GetValue(TValue value)
        {
            foreach (KeyValuePair<TKey, TValue> kvp in _Dict)
            {
                if (kvp.Value == value)
                    return kvp.Key;
            }

            throw new Exception("Undefined data type: " + value);
        }              
    }
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误"运算符'=='不能应用于'TValue'和'TValue'类型的操作数".

顺便说一句,我正在制作这个自定义集合是因为​​我的字典具有独特的价值,但我无法从字典中获取密钥.

任何帮助表示赞赏.谢谢.

Fre*_*örk 5

你尝试过使用这种Equals方法吗?

if (kvp.Value.Equals(value))
Run Code Online (Sandbox Code Playgroud)

我认为这种限制是由于==操作员不能与所有类型一起使用.举个例子:

struct Test
{
    public int Value;
}
Run Code Online (Sandbox Code Playgroud)

鉴于上述结构,以下代码将无法编译:

Test a, b;
a = b = new Test();
bool areEqual = a == b; // Operator '==' cannot be applied to 
                        // operands of type 'Test' and 'Test'
Run Code Online (Sandbox Code Playgroud)

但是,所有类型都有Equals方法,所以调用它将起作用:

Test a, b;
a = b = new Test();
bool areEqual = a.Equals(b);
Run Code Online (Sandbox Code Playgroud)