c# - 构建通用集合类

标签 c# collections dictionary generics

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

    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);
        }              
    }

但我收到错误消息“运算符‘==’无法应用于‘TValue’和‘TValue’类型的操作数”。

顺便说一句,我制作这个自定义集合是因为​​我的字典具有唯一值,但我无法从字典中按值获取键值。

感谢任何帮助。谢谢。

最佳答案

您是否尝试过使用 Equals 方法?

if (kvp.Value.Equals(value))

我认为此限制是由于 == 运算符不能用于所有类型。以下面的例子:

struct Test
{
    public int Value;
}

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

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

但是,所有类型都有 Equals 方法,因此调用它会起作用:

Test a, b;
a = b = new Test();
bool areEqual = a.Equals(b);

关于c# - 构建通用集合类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3656303/

相关文章:

c# - 注册后将用户详细信息输入数据库

c# - Entity Framework 4.0 : InvalidOperationExeception: Multiplicity constraint violated

java - Java 的前缀匹配/trie?

python - 如何从 Python 列表中删除重复的字典(带有嵌套的字典)?

pandas - python : Convert entire column to dictionary

c# - 使用标准Window 与wxWidgets 一起绘制成?

c# - 使用Symbol/Motorola Fusion dll时出错 - WinCE 6.0

java - 使用集合更新实体的 JPA 最佳实践

java - 我应该返回集合还是流?

python - 使用循环将值添加到字典键